我正在編寫一個列出打開的文件句柄的程序。其實我得到的結果太多了。我的列表包含病毒掃描程序之類的東西。我得到一堆對象類型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. 是否有可能使用一系列值的哈希表?
- 2. 是否有可能測試飛鏢列表是否可增長?
- 3. 是否有可能在mysql中添加具有變量值的表中的列?
- 4. 是否有可能創建一個具有多個值的列的sqlite表?
- 5. 是否有可能獲得Erlang類型的可接受值列表?
- 6. 是否有所有可能的PHP imap_last_error()消息的列表?
- 7. SharePoint:是否有可能從另一個列表中的列返回字段值?
- 8. 是否有可能將列表轉換爲Python中的隊列?
- 9. 是否有可能在EF5中生成帶有表值的Enum?
- 10. 是否有可能將表單值存儲在django的下拉列表中
- 11. 是否有可能更新沒有「ID」的Sharepoint列表?
- 12. 是否有可能檢索功能列表
- 13. 是否有可能非順序地更改Oracle序列的值?
- 14. 是否有可能表明在jQuery的ThickBox的數據庫值
- 15. 是否有可能獲得MySQL中的表的整數值?
- 16. 是否有可能獲得參考值?
- 17. 是否有可能從set_trace_func返回值?
- 18. RXJS Switchmap - 是否有可能在價值
- 19. add-adgroupmember是否可能有NUL值?
- 20. 是否有可能建立從XPath的值列表和XML(XSD)的XML文檔?
- 21. 檢查表值存在沒有Javascript,是否有可能?
- 22. 是否有可能進行排序的「在」 -loop(Python)的列表
- 23. 是否有可能加密mysql數據庫中的表的列
- 24. YAML:是否有可能在根節中有一個列表?
- 25. 是否有可能在輔助表上有鑑別器列jpa
- 26. 是否有可能有一個列表轉換器?
- 27. 是否有可能在一個表中有兩個FILESTREAM列?
- 28. 是否有可能使陣列
- 29. 是否有可能將列RepeatOnNewPage與SSRS?
- 30. 是否有可能從一個列表保留在C#以前的值
這些都沒有記錄由MSFT。你的選擇是爲類型信息調用Nt/ZwQueryObject(),或者相信其他人對枚舉的假設 - 例如。看看Process Hacker項目的源代碼。 –