阅读:1124回复:2
SFILTER中IoGetDeviceObjectPointer的问题
{
PDEVICE_OBJECT rawDeviceObject; PFILE_OBJECT fileObject; // // Attach to RawDisk device // RtlInitUnicodeString( &nameString, L"\\Device\\RawDisk" ); status = IoGetDeviceObjectPointer( //返回要绑定的设备对象 &nameString, //要绑定的设备的名字 FILE_READ_ATTRIBUTES, //想得到的访问 &fileObject, //给用户代码描述对应设备对象的文件对象(函数输出) &rawDeviceObject ); //描述逻辑或者虚拟或者物理设备的设备对象(函数输出) if (NT_SUCCESS( status )) { SfFsNotification( rawDeviceObject, TRUE ); ObDereferenceObject( fileObject ); } // // Attach to the RawCdRom device // RtlInitUnicodeString( &nameString, L"\\Device\\RawCdRom" ); status = IoGetDeviceObjectPointer( &nameString, FILE_READ_ATTRIBUTES, &fileObject, &rawDeviceObject ); if (NT_SUCCESS( status )) { SfFsNotification( rawDeviceObject, TRUE ); ObDereferenceObject( fileObject ); } } 声名: NTSTATUS IoGetDeviceObjectPointer( IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject ); 这里面连续两次调用 fileObject rawDeviceObject 这两个参数是系统返回的 那么是不是第二次调用返回的文件对象 和 设备对象 就已经覆盖了第一次 调用返回的结果呢 |
|
|
沙发#
发布于:2008-04-08 10:26
这个问题是不是很没有技术含量阿
怎么没有人说话阿 |
|
|
板凳#
发布于:2008-04-09 13:22
好好看一下SfFsNotification这个函数在做什么。
关乎的不在于返回 而在乎内调函数 |
|