- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用“ntQuerySystemInformation”获取所有句柄信息,例如:
NtQuerySystemInformation(SystemHandleInformation, pHandleInfor, ulSize,NULL);//SystemHandleInformation = 16
pHandleInfor 的结构是:
typedef struct _SYSTEM_HANDLE_INFORMATION
{
ULONG ProcessId;
UCHAR ObjectTypeNumber;
UCHAR Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
在xp 32bit下运行良好,但在Win7 64bit下只能获取小于65535的正确pid。这个struct中processId的类型是ULONG,我认为它可以获取大于65535的。它有什么问题吗?有没有其他 API 可以代替?
最佳答案
NtQuerySystemInformation
有两个枚举值来获取句柄信息:
CNST_SYSTEM_HANDLE_INFORMATION = 16
CNST_SYSTEM_EXTENDED_HANDLE_INFORMATION = 64
以及相应的两个结构:SYSTEM_HANDLE_INFORMATION
和SYSTEM_HANDLE_INFORMATION_EX
。
这些结构的定义是:
struct SYSTEM_HANDLE_INFORMATION
{
short UniqueProcessId;
short CreatorBackTraceIndex;
char ObjectTypeIndex;
char HandleAttributes; // 0x01 = PROTECT_FROM_CLOSE, 0x02 = INHERIT
short HandleValue;
size_t Object;
int GrantedAccess;
}
struct SYSTEM_HANDLE_INFORMATION_EX
{
size_t Object;
size_t UniqueProcessId;
size_t HandleValue;
int GrantedAccess;
short CreatorBackTraceIndex;
short ObjectTypeIndex;
int HandleAttributes;
int Reserved;
}
如您所见,第一个结构实际上只能包含 16 位进程 ID-s...
例如,请参阅 ProcessExplorer 项目的源文件 ntexapi.h 以获取更多信息。
另请注意,我的结构定义中 SYSTEM_HANDLE_INFORMATION_EX
的字段宽度可能与它们的不同(也就是说,在我的定义中,某些字段宽度因位数而异),但我想我测试过代码在 32 位和 64 位下,发现它是正确的。
如有必要,请重新检查,如果您有其他信息,请告知我们。
关于windows - 为什么在Win7 64bit下 'ntQuerySystemInformation'无法获取大于65535的进程id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951043/
我通过循环运行NtQuerySystemInformation来枚举所有进程。在调用主循环之前,我会循环NtQuerySystemInformation,直到返回值!= STATUS_INFO_LEN
我想获取内核空间中的 SystemBasicInformation、SystemPerformanceInformation、SystemFileCacheInformation(来 self 的非
对于 32 位 Windows,在使用 ZwQuerySystemInformation 声明 _SYSTEM_PROCESSES 结构(系统信息类 5)之后可以很好地满足我构建进程树的目的。 typ
我稍微修改了这里的代码: Delphi - finding the process that is accessing a file from my program 为了返回给定 pID 的句柄名称列
我是一名优秀的程序员,十分优秀!