Hey There,
When I run the code below, I get the error "The handle is invalid."
.. This is output in the 2nd fprintf. The first one gives me a success
message. What could be causing this?
-Jay
(patelj27b at gmail dot com)
char fileName[1024];
WIN32_FIND_DATA findData;
HANDLE findHandle;
HANDLE Handle2;
HANDLE volumeHandle;
static char volumeName[] = "\\\\.\\A:";
int i;
NTSTATUS status;
NTFS_FILE_RECORD_INPUT_BUFFER inBuffer;
NTFS_FILE_RECORD_OUTPUT_BUFFER outBuffer;
DWORD InBuffSize;
DWORD OutBuffSize;
LARGE_INTEGER RefNum;
DWORD bytesRet;
OVERLAPPED overLapVal;
int FileLength;
FILE* fp;
BOOL retVal;
LPVOID lpvMessageBuffer1;
inBuffer.FileReferenceNumber.u.HighPart = 0;
inBuffer.FileReferenceNumber.u.LowPart = 10;
inBuffer.FileReferenceNumber.QuadPart = 20;
inBuffer.FileReferenceNumber.HighPart = 0;
inBuffer.FileReferenceNumber.LowPart = 100;
InBuffSize = sizeof(NTFS_FILE_RECORD_OUTPUT_BUFFER) + recSize - 1;
volumeName[4] = DriveId + 'A';
volumeHandle = CreateFile( volumeName, GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
0, 0 );
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpvMessageBuffer1,
0, NULL);
fp = fopen(LOG_FILE,APPEND_MODE);
fprintf(fp,"errmsg=%s\n",lpvMessageBuffer1);
fclose(fp);
retVal = DeviceIoControl( volumeHandle,
FSCTL_GET_NTFS_FILE_RECORD,
(LPVOID)&inBuffer,
sizeof(NTFS_FILE_RECORD_INPUT_BUFFER),
(LPVOID)&outBuffer,
InBuffSize,
&bytesRet,
&overLapVal
);
if(retVal == 0)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpvMessageBuffer1,
0, NULL);
fp = fopen(LOG_FILE,APPEND_MODE);
fprintf(fp,"errmsg=%s\n",lpvMessageBuffer1);
fclose(fp);
}
FileLength = (int)outBuffer.FileRecordLength;
fp = fopen(LOG_FILE,APPEND_MODE);
fprintf(fp,"Record Num=%d\n",outBuffer.FileReferenceNumber.LowPart);
for(i = 0;i <1000;i++)
fprintf(fp,"buffVal[%d]=%c\n",i,outBuffer.FileRecordBuffer[i]);
fclose(fp);
CloseHandle(volumeHandle);