C++ 比较两个驱动程序对象是否相等?

C++ 比较两个驱动程序对象是否相等?,c++,c,windows,kernel,driver,C++,C,Windows,Kernel,Driver,我得到两个DRIVER_对象的实例。我对从注册表获取的驱动程序名使用ObjReferenceObjectByName来获取一个驱动程序\ U对象。我从设备对象结构中得到的第二个。我想检查两个DRIVER_对象是否相等,以便了解我从注册表读取的驱动程序是否与为该设备加载的驱动程序相同。警告 这个答案可能不是最准确的,我只是根据多年前凌晨写的胡克的旧记忆: 如果有人知道得更清楚,而我犯了一个错误,请在下面给我一张便条,我会改正的 免责声明 ObReferenceObjectByName未记录且存在风

我得到两个DRIVER_对象的实例。我对从注册表获取的驱动程序名使用ObjReferenceObjectByName来获取一个驱动程序\ U对象。我从设备对象结构中得到的第二个。我想检查两个DRIVER_对象是否相等,以便了解我从注册表读取的驱动程序是否与为该设备加载的驱动程序相同。

警告 这个答案可能不是最准确的,我只是根据多年前凌晨写的胡克的旧记忆:

如果有人知道得更清楚,而我犯了一个错误,请在下面给我一张便条,我会改正的

免责声明 ObReferenceObjectByName未记录且存在风险,您不应该使用它,例如,在不了解限制的情况下,它将在Windows 7下失败

答复 驱动程序对象是:

typedef struct 
{
     SHORT Type;
     SHORT Size;
     PDEVICE_OBJECT DeviceObject;
     ULONG Flags;
     PVOID DriverStart;
     ULONG DriverSize;
     PVOID DriverSection;
     PDRIVER_EXTENSION DriverExtension;
     UNICODE_STRING DriverName;
     PUNICODE_STRING HardwareDatabase;
     PFAST_IO_DISPATCH FastIoDispatch;
     LONG * DriverInit;
     PVOID DriverStartIo;
     PVOID DriverUnload;
     LONG * MajorFunction[28];
} DRIVER_OBJECT;
比较DriverSize指定的DriverStart长度,查看它们是否映射到相同的内存地址,并查看是否有结果

但是,如果您试图保持兼容,我认为您最好看看每个对象中的DriverInit、DriverStartIo和DriverRunLoad是否指向相同的地址。DriverSection/DriverSize/DriverStart均未记录,应避免使用


希望这能有所帮助。

嗯,我遇到了一个非常简单、优雅的解决方案,我想与大家分享。指向DRIVER_对象的指针,即DRIVER_对象的地址是一个十六进制数。由于一个驱动程序只有一个DRIVER_对象,因此比较这个地址十六进制数是否相等会很有吸引力

PDRIVER_OBJECT a;
PDRIVER_OBJECT b;
/* get the values of a and b
...
...
*/
if (a == b)
{
// they point to the same DRIVER_OBJECT.
}