我正在编写一个列出打开的文件句柄的程序。其实我得到的结果太多了。我的列表包含病毒扫描程序之类的东西。我得到一堆对象类型43,看起来不像我想要的。有没有这些值的列表在任何地方?是否有SYSTEM_HANDLE_ENTRY.ObjectType的可能值列表?
0
A
回答
2
您可以致电NtQueryObject
与指定ObjectTypesInformation
信息类。这会为您提供有关系统中当前注册的所有对象类型的信息。使用SYSTEM_HANDLE_ENTRY.ObjectType
作为返回数组的索引,以获取有关相应对象类型的信息。或者,您可以使用NtQueryObject
和ObjectTypeInformation
来获取有关给定对象(由其句柄指定)的类型信息。
此代码应检索所有类型的对象的信息。
typedef enum _OBJECT_INFORMATION_CLASS {
ObjectBasicInformation,
ObjectNameInformation,
ObjectTypeInformation,
ObjectTypesInformation,
ObjectHandleFlagInformation,
ObjectSessionInformation,
} OBJECT_INFORMATION_CLASS;
typedef struct _OBJECT_TYPE_INFORMATION {
UNICODE_STRING TypeName;
ULONG TotalNumberOfObjects;
ULONG TotalNumberOfHandles;
ULONG TotalPagedPoolUsage;
ULONG TotalNonPagedPoolUsage;
ULONG TotalNamePoolUsage;
ULONG TotalHandleTableUsage;
ULONG HighWaterNumberOfObjects;
ULONG HighWaterNumberOfHandles;
ULONG HighWaterPagedPoolUsage;
ULONG HighWaterNonPagedPoolUsage;
ULONG HighWaterNamePoolUsage;
ULONG HighWaterHandleTableUsage;
ULONG InvalidAttributes;
GENERIC_MAPPING GenericMapping;
ULONG ValidAccessMask;
BOOLEAN SecurityRequired;
BOOLEAN MaintainHandleCount;
ULONG PoolType;
ULONG DefaultPagedPoolCharge;
ULONG DefaultNonPagedPoolCharge;
} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
typedef struct _OBJECT_TYPES_INFORMATION {
LONG NumberOfTypes;
// OBJECT_TYPE_INFORMATION TypeInformation [1];
} OBJECT_TYPES_INFORMATION, *POBJECT_TYPES_INFORMATION;
NTSTATUS QueryObjectTypesInfo(POBJECT_TYPES_INFORMATION *TypesInfo)
{
ULONG StartBufferLength = 28;
ULONG BufferLength = 0;
NTSTATUS status = 0xC0000001;
status = STATUS_SUCCESS;
*TypesInfo = (POBJECT_TYPES_INFORMATION)malloc(StartBufferLength);
if (*TypesInfo != NULL) {
status = NtQueryObject(NULL, ObjectTypesInformation, TypesInfo, StartBufferLength, &BufferLength);
if (status == STATUS_INFO_LENGTH_MISMATCH) {
*TypesInfo = NULL;
while (status == STATUS_INFO_LENGTH_MISMATCH) {
if (*TypesInfo != NULL)
free(*TypesInfo);
*TypesInfo = (POBJECT_TYPES_INFORMATION)malloc(BufferLength);
if (*TypesInfo != NULL)
status = NtQueryObject(NULL, ObjectTypesInformation, *TypesInfo, BufferLength, &BufferLength);
else status = STATUS_INSUFFICIENT_RESOURCES;
}
if (!NT_SUCCESS(status)) {
if (*TypesInfo != NULL) {
free(*TypesInfo);
*TypesInfo = NULL;
}
}
}
} else status = STATUS_INSUFFICIENT_RESOURCES;
return status;
}
正如上面的评论所述,这个东西是相当无证的。然而,上面的代码(稍作修改..例如,你需要得到NtQueryObject
程序的地址,并定义一些NTSTATUS
contants)对我的作品在64位Windows 8.1。
对于一个完整的代码(这是很旧的和在捷克评论),从我的(捷克)网站上下载这个项目: https://jadro-windows.cz/download/ntqueryobject.zip
使用qo.exe --list-types
命令获取类型信息
相关问题
- 1. 是否有可能在mysql中添加具有变量值的表中的列?
- 2. 是否有可能创建一个具有多个值的列的sqlite表?
- 3. 是否有可能获得Erlang类型的可接受值列表?
- 4. 是否有所有可能的PHP imap_last_error()消息的列表?
- 5. SharePoint:是否有可能从另一个列表中的列返回字段值?
- 6. 是否有可能更新没有“ID”的Sharepoint列表?
- 7. 是否有可能获得MySQL中的表的整数值?
- 8. 是否有可能建立从XPath的值列表和XML(XSD)的XML文档?
- 9. RXJS Switchmap - 是否有可能在价值
- 10. 检查表值存在没有Javascript,是否有可能?
- 11. 是否有可能进行排序的“在” -loop(Python)的列表
- 12. 是否有可能在一个表中有两个FILESTREAM列?
- 13. 是否有可能将列RepeatOnNewPage与SSRS?
- 14. 是否有可能查询列表中的元素?
- 15. 是否有可能只接受整数列表的Ocaml函数?
- 16. 是否有可能使用CSS这样的无序列表?
- 17. 是否有可能得到的SonarQube常规规则列表
- 18. 是否有可能将列表绑定到WinForms中的ListView?
- 19. 在C#的泛型中键入列表:是否有可能?
- 20. 是否有可能从列表中的项目获取索引?
- 21. 是否有我可以用于objectClass和objectCategory的值列表?
- 22. 是否有可能按列值基于value-group,在sqlite中?
- 23. 是否有可能使用SQL“unpivot”表?
- 24. 是否有可能ajaxify drupal multistep表单?
- 25. 是否有可能在分组表
- 26. couchdb:是否有身份列表功能?
- 27. Powershell是否有可能在散列表中存储csv标题和值
- 28. 是否有可能重新排序DB2 ZOS V8表行值代入列
- 29. 是否有可能在具有标识列的表上使用表分割?
- 30. 这是可能的列表?
这些都没有记录由MSFT。你的选择是为类型信息调用Nt/ZwQueryObject(),或者相信其他人对枚举的假设 - 例如。看看Process Hacker项目的源代码。 –