/*****************************************/ /* セクターリード */ /* */ /* コマンド: SECRD ドライブ名 セクター番号 */ /* ※管理者権限で実行 */ /* 結 果: SECDMP_X_999999999.txtを作成 */ /*****************************************/ #include #include #define SECSIZ 512 void main( ) /*----------*/ /* 主処理 */ /*----------*/ { char vPath[32]; // ボリュームパス long secNO=0; // セクター番号 HANDLE hVlm; // ドライブハンドル LARGE_INTEGER ofs;// セクター先頭(バイト) FILE *fp=NULL; char drv,buf[1024]; char bufT[SECSIZ/16*64];// 文字列バッファ char fnam[32],c[256]; int ir,i,j,len; printf("\n★セクターリード★\n"); printf("\n※管理者権限で実行\n"); printf("\nドライブ名 (例 F) : "); fflush(stdout); gets(c); drv=c[0]; sprintf(vPath,"\\\\.\\%c:",drv); // ボリュームパス hVlm=CreateFileA(vPath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if ( hVlm==INVALID_HANDLE_VALUE ) { printf("ドライブ名がちがいます"); goto L9; } printf("\nセクター番号: "); fflush(stdout); gets(c); secNO=atol(c); ofs.QuadPart=secNO*SECSIZ; ir=SetFilePointerEx(hVlm,ofs,NULL,FILE_BEGIN); // シーク if ( ir==FALSE ) { printf("セクター位置にシークできません"); goto L9; } ir=ReadFile(hVlm,buf,SECSIZ,NULL,NULL); // 1セクタ読み取り if ( ir==FALSE ) { printf("セクターを読めません"); goto L9; } len=0; bufT[len]='\0'; for( i=0; i