Hi everyone,
I’m a newbie in File system driver development. Now, I’m developing a mini filter driver. In my driver, I have only one callback routine for IRP_MJ_CREATE operation, but unfortunately I always get “Break due to Page Fault(0Eh). Fault=0003” error when starting it (I used SoftIce to debug driver and got this message). Here is my callback routine:
FLT_PREOP_CALLBACK_STATUS
FpPreCreate (
__inout PFLT_CALLBACK_DATA Data,
__in PCFLT_RELATED_OBJECTS FltObjects,
__deref_out_opt PVOID *CompletionContext
)
{
FLT_PREOP_CALLBACK_STATUS returnStatus = FLT_PREOP_SUCCESS_NO_CALLBACK;
PFLT_FILE_NAME_INFORMATION nameInfo = NULL;
NTSTATUS status;
CHAR szTmp[260];
ANSI_STRING ansiName;
szTmp[0] = ANSI_NULL;
if (FltObjects->FileObject != NULL) {
status = FltGetFileNameInformation(Data,
FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT,
&nameInfo);
if (!NT_SUCCESS(status)) {
RtlCopyMemory(szTmp, NO_NAME, sizeof(NO_NAME));
} else {
status = FltParseFileNameInformation(nameInfo);
if (!NT_SUCCESS(status)) {
RtlCopyMemory(szTmp, NO_NAME, sizeof(NO_NAME));
} else {
RtlUnicodeStringToAnsiString(&ansiName, &nameInfo->Name, FALSE);
if (ansiName.Length < 260 - 1) {
RtlCopyMemory(szTmp, ansiName.Buffer, ansiName.Length);
szTmp[ansiName.Length] = ANSI_NULL;
} else {
RtlCopyMemory(szTmp, INSUFFICIENCE_BUFFER, sizeof(INSUFFICIENCE_BUFFER));
}
}
}
}
if (NULL != nameInfo) {
FltReleaseFileNameInformation(nameInfo);
}
DbgPrint(“FpPreCreate::Filename=%s”, szTmp);
return returnStatus;
}
Please help me to show errors in my function and how to correct?
Many thanks.
trung
Got a little couch potato?
Check out fun summer activities for kids.