Hi
Who can tell me how to get WDFFILEOBJECT from WDFREQUEST created by WdfRequestCreate?
First, I create a WDFDEVICE as below.
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&objectAttribs,
FILE_OBJECT_CONTEXT);
WdfDeviceInitSetFileObjectConfig(DeviceInit,
&fileConfig,
&objectAttribs);
WdfDeviceInitSetRequestAttributes(
DeviceInit,
&objectAttribs
);
status = WdfDeviceCreate(&DeviceInit,
&objectAttribs,
&controlDevice);
Then, I create a WDFREQUEST.
WDFREQUEST sendRequest;
WDF_OBJECT_ATTRIBUTES RequestObjectAttributes;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&RequestObjectAttributes,
FILE_OBJECT_CONTEXT);
RequestObjectAttributes.ParentObject = controlDevice;
Status = WdfRequestCreate(
&RequestObjectAttributes,
NULL,
&sendRequest
);
sendRequest is used in the following function.
NTSTATUS SendData(
IN PUCHAR pDataBuffer,
IN ULONG DataLength,
IN WDFREQUEST Request)
{
......
WDFFILEOBJECT fileObject;
......
fileObject = WdfRequestGetFileObject(Request);
......
}
SendData is used as
NtStatus = SendData(pDataBuffer, 1000, sendRequest);
Computer is crashed when WdfRequestGetFileObject is called.
But WdfRequestGetFileObject can get WDFFILEOBJECT from WDFREQUEST created by framework such as EvtIoRead.
Cannot WdfRequestGetFileObject get WDFFILEOBJECT from WDFREQUEST created by its own WdfRequestCreate ?
Or WDFREQUEST should be initialised with some WDFFILEOBJECT after it is created?
(The WDFREQUEST is not sent to another driver. It is sent to itself.)
Thanks.
Tatuo