阅读:2614回复:4
IoCreateFileSpecifyDeviceObjectHint的疑问?
minifilter里的post create,为了解决irp重入,使用了这个函数:IoCreateFileSpecifyDeviceObjectHint
代码如下: OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING ObjectName; WCHAR fileName[MAX_PATH] = L"\\??\\C:\\test.txt"; RtlInitUnicodeString(&ObjectName, fileName); InitializeObjectAttributes(&ObjectAttributes, &ObjectName, OBJ_KERNEL_HANDLE, NULL, NULL ); status = IoCreateFileSpecifyDeviceObjectHint( &Handle, FILE_READ_DATA, &ObjectAttributes, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, FILE_OPEN, FILE_NON_DIRECTORY_FILE, NULL, 0, CreateFileTypeNone, NULL, IO_IGNORE_SHARE_ACCESS_CHECK, FltObjects->FileObject->DeviceObject->AttachedDevice ); 但老是返回错误: STATUS_INVALID_DEVICE_OBJECT_PARAMETER STATUS_MOUNT_POINT_NOT_RESOLVED STATUS_OBJECT_PATH_SYNTAX_BAD 真的很晕,三个错误都返回了,objectname应该没错,就是搞不清minifilter里到底该传给IoCreateFileSpecifyDeviceObjectHint哪个DeviceObject(最后一个参数) 而传入DeviceObject = IoGetRelatedDeviceObject( FltObjects->FileObject ); 时老是蓝屏。。 特向各位大虾请教! |
|
沙发#
发布于:2008-03-31 13:06
在minifilter的世界里不要老是惦记着Legacy驱动里的东西,
FltCreateFile(Ex)完全替代IoCreateFileSpecifyDeviceObjectHint |
|
|
板凳#
发布于:2008-03-31 15:27
赞devia 3Q~
|
|
地板#
发布于:2008-03-31 16:37
IoCreateFileSpecifyDeviceObjectHint可以使用,因为FltCreateFile(Ex)其实也是调用这个函数,关键最后那个DEVICEOBJERCT不对,要用的话,建议你反汇编下FLTMGR,他把DEVICEOBJERCT封装他自己内部的一个结构里了,你也可以获得他,不过既然都帮你封好了,又何必自找麻烦呢???
|
|
|
地下室#
发布于:2008-03-31 19:28
谢谢wowocock的回复
xp下我用: status = FltCreateFile( Globals.Filter, FltObjects->Instance, &Handle, FILE_READ_DATA, &ObjectAttributes, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, FILE_OPEN, FILE_NON_DIRECTORY_FILE, NULL, 0, IO_IGNORE_SHARE_ACCESS_CHECK); 现在已经解决问题了,没想到minifilter有这些专用的封装函数。 |
|