VDMEnumProcessWOW 函数 (vdmdbg.h)

[此函数不受支持,将来可能会更改或不可用。]

枚举运行 16 位 Windows 任务的所有虚拟 DOS 计算机。

语法

INT VDMEnumProcessWOW(
  [in] PROCESSENUMPROC fp,
  [in] LPARAM          lparam
);

参数

[in] fp

指向回调函数的指针。 为每个枚举的 VDM 调用 函数。 有关详细信息,请参阅 ProcessVDMs 回调函数。

[in] lparam

传递给回调函数的用户定义值。

返回值

正在运行的 VM 数,或在枚举终止之前枚举的数目。

注解

这些 VM 包含 WowExec.exe 任务。 DOS VM 未枚举。 若要枚举 DOS VM,需要使用其他方法。 首先,可以使用 VDMEnumProcessWOW () 列出所有 Win16 VDM,然后使用一些其他方案 ((例如 PSAPI) )枚举 NTVDM.exe 的所有实例。 完全枚举中不存在于 Win16 列表中的任何 NTVDM.exe 都是 DOS VDM。

示例

以下示例演示如何枚举运行 16 位 Windows 任务的虚拟 DOS 计算机。

   // Enumerate all 16-bit tasks on the system.
   
   #include <windows.h>
   #include <stdio.h>
   #include <vdmdbg.h>

   BOOL WINAPI ProcessVDMs( DWORD, DWORD, LPARAM );
   BOOL WINAPI ProcessTasks( DWORD, WORD, WORD, PSZ, PSZ, LPARAM );

   #pragma comment( lib, "vdmdbg.lib" )
   
   void main()
   {
      // Enumerate VDMs
      VDMEnumProcessWOW(
         (PROCESSENUMPROC)ProcessVDMs,
         (LPARAM)NULL
      );

   }

   BOOL WINAPI ProcessVDMs( DWORD dwProcessId, DWORD dwAttrib,
      LPARAM t )
   {
      printf("\nProcess ID: %d\n", dwProcessId);

      // Use process ID of VDM to enumerate through its tasks
      VDMEnumTaskWOWEx(
         dwProcessId,
         (TASKENUMPROCEX)ProcessTasks,
         (LPARAM)NULL
      );

      // Keep enumerating
      return FALSE;
   }

   BOOL WINAPI ProcessTasks( DWORD dwThreadId, WORD hMod16, WORD hTask16,
      PSZ pszModName, PSZ pszFileName, LPARAM lParam )
   {
      // Print task's information
      printf("Thread ID: %d\n", dwThreadId);
      printf("Module handle: %d\n", hMod16);
      printf("Task handle: %d\n", hTask16);
      printf("Module Name: %s\n", pszModName);
      printf("File Name: %s\n", pszFileName);

      // Keep enumerating
      return FALSE;
   }


要求

要求
目标平台 Windows
标头 vdmdbg.h
Library VdmDbg.lib
DLL VdmDbg.dll