#include <stdio.h> #include <conio.h> #include <assert.h> #include "sense4.h" define DEST_DIR "df01" int main(int argc, char* argv[]) { SENSE4_CONTEXT stS4Ctx = {0}; unsigned long dwResult = 0; unsigned char lpOldPin[] = "123456781234567812345678"; unsigned long dwOldPinLen = sizeof(lpOldPin)-1; unsigned char lpNewPin[] = "zaq12wsxcde34rfvbgt56yhn"; unsigned long dwNewPinLen = sizeof(lpNewPin)-1; unsigned char lpOldUsrPin[] = "12345678"; unsigned long dwOldUsrPinLen = sizeof(lpOldUsrPin)-1; unsigned char lpNewUsrPin[] = "zaq12wsx"; unsigned long dwNewUsrPinLen = sizeof(lpNewUsrPin)-1; unsigned long dwSubDirSize = 20000;/* estimated directory size: 3K */ printf("指定 ELドングルに接続...\n"); if (!(dwResult = OpenS4ByIndex(FIRST_S4_INDEX, &stS4Ctx))) { return 1; } printf("Success!\n"); /* ルートディレクトリに移動 */ printf("Change to root directory...\n"); dwResult = S4ChangeDir(&stS4Ctx, "\\"); if (dwResult != S4_SUCCESS) { printf("Change directory failed!\n",dwResult); S4Close(&stS4Ctx); return dwResult; } printf("Success!\n"); printf("ディレクトリ %s に移動\n", DEST_DIR); dwResult = S4ChangeDir(&stS4Ctx, DEST_DIR); if (dwResult != S4_SUCCESS && dwResult != S4_FILE_NOT_FOUND) { printf("Change directory failed! \n",dwResult); S4Close(&stS4Ctx); return dwResult; }else if (dwResult == S4_SUCCESS) { printf("Success!\n"); /* ディレクトリが存在したら削除 ディレクトリ以下のファイルとサブディレクトリが削除される ELに変更を加えるため開発者 PIN でログイン(S4VerifyPin) */ printf("To erase all the file under %s,first verify DEV_PIN...\n", DEST_DIR); dwResult = S4VerifyPin(&stS4Ctx, lpNewPin, dwNewPinLen, S4_DEV_PIN); if (dwResult != S4_SUCCESS) { printf("Verify DEV_PIN failed! \n",dwResult); S4Close(&stS4Ctx); return dwResult; } printf("Success!\n"); printf("Erasing...\n"); /* PIN はディレクトリ毎に設定する。ルートディレクトリを削除すると PIN は初期値に設定される */ dwResult = S4EraseDir(&stS4Ctx, NULL); if (dwResult != S4_SUCCESS) { printf("Erase root directory failed! \n",dwResult); ResetAndCloseS4(&stS4Ctx); return dwResult; } printf("Success!\n"); }else /* "df01"という名前にディレクトリを作成 */ { printf("Not exist!Now create directory %s...\n", DEST_DIR); /* ルートディレクトリの開発者 PIN でログイン */ printf("Verify DEV_PIN of root directory...\n"); dwResult = S4VerifyPin(&stS4Ctx, lpOldPin, dwOldPinLen, S4_DEV_PIN); if (dwResult != S4_SUCCESS) { printf("Verify DEV_PIN failed! \n",dwResult); S4Close(&stS4Ctx); return dwResult; } printf("Success!\n"); printf("Create directory %s ...\n", DEST_DIR); dwResult = S4CreateDir(&stS4Ctx, DEST_DIR, dwSubDirSize, S4_CREATE_SUB_DIR); if (dwResult != S4_SUCCESS) { printf("Create df01 directory failed! \n",dwResult); ResetAndCloseS4(&stS4Ctx); return dwResult; } printf("Success!\n"); } /* 指定ディレクトリの開発者 PIN とユーザ PIN を設定 */ printf("Change USER_PIN of directory %s...\n", DEST_DIR); dwResult = S4ChangePin(&stS4Ctx,lpOldUsrPin,dwOldUsrPinLen,lpNewUsrPin,dwNewUsrPinLen,S4_USER_PIN); if (dwResult != S4_SUCCESS) { printf("Change USER_PIN of df01 directory failed! \n",dwResult); S4Close(&stS4Ctx); return dwResult; } printf("Success!\n"); printf("Change DEV_PIN of directory %s...\n", DEST_DIR); dwResult = S4ChangePin(&stS4Ctx,lpOldPin,dwOldPinLen,lpNewPin,dwNewPinLen,S4_DEV_PIN); if (dwResult != S4_SUCCESS) { printf("Change DEV_PIN of df01 directory failed! \n",dwResult); S4Close(&stS4Ctx); return dwResult; } printf("Success!\n"); /* PINでログインしたので、S4Close ではなく ResetAndCloseS4 で切断 ResetAndCloseS4(&stS4Ctx); getch(); return dwResult; }