3

「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 32 ビットでは問題なく動作しますが、Win7 64 ビットでは 65535 未満の適切な pid しか取得できません。この構造体の processId のタイプは ULONG です。65535 を超える値を取得できると思います。何が問題なのですか? 代わりに他の API はありますか?

4

2 に答える 2

0

Raymond Chen の記事からProcesses, commit, RAM, threads, and how high can go? :

Windows NT の関係者は、プロセス ID の数値が大きくなりすぎないように努めていることを後で知りました。今世紀初頭、カーネル チームは、プロセス ID が再利用される割合を減らすために、数値を非常に大きくすることを実験しましたが、技術的な理由ではなく、人々が不満を述べたため、数値を小さくする必要がありました。大きなプロセス ID は、タスク マネージャーで見苦しく見えました。(ある顧客は、自分のコンピューターに何か問題があるのか​​とさえ尋ねました。)

于 2014-05-30T09:33:13.080 に答える