NtQueryObject在具有特定访问掩码的对象类型编号30上挂起

时间:2014-11-11 14:43:32

标签: windows visual-c++ system handle internal

我看到NtQueryObject挂起了具有这些授权访问值的重复句柄(handle.GrantedAccessACCESS_MASK类型):

1179785 (integer) --> 0b100100000000010001001 (binary)
1180063 (integer) --> 0b100100000000110011111 (binary)
1180041 (integer) --> 0b100100000000110001001 (binary)
2032127 (integer) --> 0b111110000000111111111 (binary)
                             ||||||| |   |
                             ||||||| |   |
                             ||||||| |   |
                             ^^^^^^^ ^   ^
 Possible culprit bits seem to be 3rd and 7th bit, but could also be 9th to 15th bit.

总是,handle.ObjectTypeNumber是30.这个对象类型编号是什么,如何获得此类型的特定权限列表?我的实验有点显示它必须是0-15位,导致此对象类型数为30(整数)的挂起。 handle是SYSTEM_HANDLE类型,定义为:

typedef struct _SYSTEM_HANDLE
{
    ULONG ProcessId;
    BYTE ObjectTypeNumber;
    BYTE Flags;
    USHORT Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;

我正在编写一个取证工具,使用here描述的方法枚举所有打开的文件句柄。

1 个答案:

答案 0 :(得分:5)

我有点晚了,但如果您只对基于磁盘的文件感兴趣,可以这样做:

if(GetFileType(handle) == FILE_TYPE_DISK) {
    ...
}

挂起通常发生在非磁盘文件(例如管道)上。使用这种技术,您根本不需要担心handle.GrantedAccess。