Hi.
Can anyone see a problem with the two functions below? The problem I seem to have is with the line below.
NtStatus = FltGetFileNameInformation(pFltCallbackData, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &pFltFileNameInformation);
FLT_PREOP_CALLBACK_STATUS PreRead (IN OUT PFLT_CALLBACK_DATA pFltCallbackData, IN PCFLT_RELATED_OBJECTS PcFltRelatedObjects, __deref_out_opt PVOID *pVoidCompletionContext)
{
PSTREAM_HANDLE_CONTEXT pStreamHandleContext;
PFLT_FILE_NAME_INFORMATION pFltFileNameInformation;
NTSTATUS NtStatus;
BOOLEAN bFile;
PFILE_OBJECT pFileObject;
UNREFERENCED_PARAMETER (pVoidCompletionContext);
DbgPrint(“PreRead Called.\n”);
if (IoThreadToProcess(pFltCallbackData->Thread) == gData.pEprocess) return FLT_PREOP_SUCCESS_NO_CALLBACK;
if (!NT_SUCCESS(pFltCallbackData->IoStatus.Status) || (pFltCallbackData->IoStatus.Status == STATUS_REPARSE)) return FLT_PREOP_COMPLETE;
NtStatus = FltGetFileNameInformation(pFltCallbackData, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &pFltFileNameInformation);
if (!NT_SUCCESS(NtStatus)) return FLT_PREOP_COMPLETE;
FltParseFileNameInformation (pFltFileNameInformation);
NtStatus = File(pFltCallbackData, PcFltRelatedObjects, pFltFileNameInformation, FALSE, FALSE, TRUE, FALSE, IoThreadToProcess(pFltCallbackData->Thread));
return NtStatus;
}
FLT_PREOP_CALLBACK_STATUS PreWrite (IN OUT PFLT_CALLBACK_DATA pFltCallbackData, IN PCFLT_RELATED_OBJECTS PcFltRelatedObjects, __deref_out_opt PVOID *pVoidCompletionContext)
{
PSTREAM_HANDLE_CONTEXT pStreamHandleContext;
PFLT_FILE_NAME_INFORMATION pFltFileNameInformation;
NTSTATUS NtStatus;
BOOLEAN bFile;
PFILE_OBJECT pFileObject;
UNREFERENCED_PARAMETER (pVoidCompletionContext);
DbgPrint(“PreWrite Called.\n”);
if (IoThreadToProcess(pFltCallbackData->Thread) == gData.pEprocess) return FLT_PREOP_SUCCESS_NO_CALLBACK;
if (!NT_SUCCESS(pFltCallbackData->IoStatus.Status) || (pFltCallbackData->IoStatus.Status == STATUS_REPARSE)) return FLT_PREOP_COMPLETE;
NtStatus = FltGetFileNameInformation(pFltCallbackData, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &pFltFileNameInformation);
if (!NT_SUCCESS(NtStatus)) return FLT_PREOP_COMPLETE;
FltParseFileNameInformation (pFltFileNameInformation);
NtStatus = File(pFltCallbackData, PcFltRelatedObjects, pFltFileNameInformation, FALSE, FALSE, TRUE, FALSE, IoThreadToProcess(pFltCallbackData->Thread));
return NtStatus;
}