次の方法で共有


VDMEnumProcessWOW 関数 (vdmdbg.h)

[この関数はサポートされておらず、今後変更または使用できない可能性があります。]

16 ビット Windows タスクを実行しているすべての仮想 DOS マシンを列挙します。

構文

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

パラメーター

[in] fp

コールバック関数へのポインター。 関数は、列挙された VDM ごとに呼び出されます。 詳細については、 ProcessVDMs コールバック関数に関するページを参照してください。

[in] lparam

コールバック関数に渡されるユーザー定義値。

戻り値

実行中の VDM の数、または列挙が終了する前に列挙された数。

注釈

これらの VDM には、WowExec.exe タスクが含まれています。 DOS VDM は列挙されません。 DOS VDM を列挙するには、別の方法を使用する必要があります。 まず、VDMEnumProcessWOW() を使用して、すべての Win16 VDMs の一覧を作成し、他のスキーム (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