Verwendung der VDMDBG-Funktionen unter Windows NT, Windows 2000 und Windows XP

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 182559 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Selbst wenn in einer Umgebung mit 32-Bit-Programmierung, sind beim Arbeiten mit 16-Bit-Anwendungen erforderlich ist. Führen Sie in Windows NT 16-Bit-Anwendungen innerhalb einer VDM (Virtual DOS Machine). VDMDBG.dll enthält viele Funktionen, die zum Arbeiten mit 16-Bit-Anwendungen nützlich sind. Diese Bibliothek ist Teil des Microsoft Platform SDK.

VDMDBG Funktionen bieten eine gute Möglichkeit zum Auflisten, erstellen und beenden Sie 16-Bit-Prozesse (Aufgaben) innerhalb einer VDM. Dieser Artikel beschreibt die Verwendung dieser Funktionen unter Microsoft Windows NT, Windows 2000 und Windows XP.

Weitere Informationen

Wenn Sie eine der VDMDBG-Funktionen verwenden, müssen Sie VDMDBG.lib mit Ihrem Projekt verknüpfen.

Die unten erwähnten VDMDBG-Funktionen sind nur eine Teilmenge der verfügbaren Funktionen. Allerdings sind Funktionen, die nicht erwähnt sind nur an einen Debugger von Bedeutung.

Aufzählen von VDMs

Die VDMEnumProcessWOW()-Funktion bietet eine einfache Möglichkeit zum Auflisten aller VDMs 16-Bit-Windows-Tasks ausgeführt. Diese VDMs enthalten die WowExec.exe Aufgabe. DOS VDMs werden nicht aufgelistet.

Die Deklaration für diese Funktion lautet wie folgt:
   INT WINAPI VDMEnumProcessWOW( PROCESSENUMPROC fp, LPARAM lparam );
				
der Rückgabewert für diese Funktion ist die Anzahl der VDMs derzeit ausgeführt oder die Zahl vor dem aufgelistete Enumeration wurde beendet. fp ist ein Zeiger auf eine Rückruffunktion. Die Funktion wird für jede VDM aufgerufen, die aufgelistet wird. lParam ist ein benutzerdefiniertes Wert, der an die Rückruffunktion übergeben wird.

PROCESSENUMPROC ist wie folgt deklariert:
   typedef BOOL ( WINAPI *PROCESSENUMPROC )(
      DWORD dwProcessId,
      DWORD dwAttributes,
      LPARAM lpUserDefined
   );
				
die Funktion sollte TRUE Stop Enumeration oder DwProcessId-Enumeration. die Prozess-ID des Prozesses NTVDM.exe ist weiterhin falsch wieder. Sie benötigen diese ID, wenn die anderen unten aufgeführten VDM-Funktionen aufrufen.

Auflisten von 16-Bit-Windows-Aufgaben

VDMEnumTaskWOW() und VDMEnumTaskWOWEx() können Sie Vorgänge innerhalb einer bestimmten VDM auflisten. Der Unterschied zwischen den beiden besteht, dass VDMEnumTaskWOWEx() Weitere Informationen an die Rückruffunktion bietet. Sie sollten nur von VDMEnumProcessWOW() mit diesen Vorgang Enumeration Funktionen zurückgegebene VDMs verwenden. Mit DOS VDMs Sinn keinen da jede DOS-Anwendung in einem eigenen VDM ausgeführt wird.

Die Deklarationen sind:
   INT WINAPI VDMEnumTaskWOW( DWORD dwProcessId, TASKENUMPROC fp,
                              LPARAM lparam );
				
   INT WINAPI VDMEnumTaskWOWEx( DWORD dwProcessId, TASKENUMPROCEX fp,
                                LPARAM lparam );
				
der Rückgabewert für jede dieser Funktionen ist die Anzahl der derzeit in der angegebenen VDM ausgeführt oder die Zahl vor dem aufgelistete Enumeration wurde beendet. DwProcessId ist die PROZESSKENNUNG des VDM. fp ein Zeiger auf eine Rückruffunktion. Die Funktion wird für jeden Vorgang aufgerufen, die aufgelistet wird. lParam ist ein benutzerdefiniertes Wert, der an die Rückruffunktion übergeben wird.

TASKENUMPROC und TASKENUMPROCEX sind wie folgt definiert:
   typedef BOOL ( WINAPI *TASKENUMPROC )(
      DWORD dwThreadId,
      WORD hMod16,
      WORD hTask16,
      LPARAM lpUserDefined
   );
				
   typedef BOOL ( WINAPI *TASKENUMPROCEX )(
      DWORD dwThreadId,
      WORD hMod16,
      WORD hTask16,
      PSZ pszModName,
      PSZ pszFileName,
      LPARAM lpUserDefined
   );
				
diese Funktionen sollte TRUE Stop Enumeration oder falsch Enumeration weiterhin wieder. HTask16 können in einem Aufruf Sie um den Vorgang zu beenden.

Beispiel-Enumeration

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

   BOOL WINAPI ProcessEnumProc( DWORD, DWORD, LPARAM );
   BOOL WINAPI TaskEnumProcEx( DWORD, WORD, WORD, PSZ, PSZ, LPARAM );

   void main()
   {
      // Enumerate VDMs.
      VDMEnumProcessWOW(
         (PROCESSENUMPROC)ProcessEnumProc,
         (LPARAM)NULL
      );

   }

   BOOL WINAPI ProcessEnumProc( 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)TaskEnumProcEx,
         (LPARAM)NULL
      );

      // Keep enumerating.
      return FALSE;
   }

   BOOL WINAPI TaskEnumProcEx( 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;
   }
				

Erstellen von 16-Bit-Tasks

VDMStartTaskInWOW() erstellt eine Aufgabe innerhalb einer VDM. Die Deklaration lautet wie folgt:
   BOOL WINAPI VDMStartTaskInWOW( DWORD dwProcessId, LPSTR lpCommandLine,
                                  WORD wShow );
				
der Rückgabewert dieser Funktion ist TRUE, wenn der Vorgang erfolgreich gestartet wurde, andernfalls ist er FALSE. DwProcessId die VDM-Prozess-ID ist LpCommandLine ist eine Zeichenfolge, die, die den Dateinamen der 16-Bit-Anwendung zusammen mit alle Befehlszeilenparameter angibt. wShow gibt an, wie das Fenster angezeigt werden. wShow kann beliebiger Wert sein, der für die 16-Bit-ShowWindow() Funktion gültig ist.

Beenden 16-Bit-Tasks

Rufen Sie zum Beenden ein Vorgangs innerhalb einer VDM VDMTerminateTaskWOW(). Die Deklaration lautet wie folgt:
   BOOL WINAPI VDMTerminateTaskWOW( DWORD dwProcessId, WORD htask );
				
der Rückgabewert dieser Funktion ist TRUE, wenn der Task erfolgreich beendet ist, andernfalls ist er FALSE. DwProcessId ist VDM-Prozess-ID hTask das Handle für den Vorgang. Diese Aufgabe Handle kann über VDMEnumTaskWOW() oder VDMEnumTaskWOWEx() abgerufen werden.

Diese Methode ist eine grobe Entsprechung zu TerminateProcess() in Win32. Es sollte möglichst vermieden werden. Es ist nicht der Aufgabe Gelegenheit zu klar beenden Daten möglicherweise verloren. Im Gegensatz zu Win32 ist die WowExec nicht garantiert nach einem beendeten Vorgang bereinigen. Diese lassen die VDM beschädigt und unbrauchbar. Die Aufgabe ordnungsgemäß beendet werden, senden Sie ein WM_CLOSE an sein Fenster der obersten Ebene.

Hinweis zu 16-Bit-DOS-Anwendungen

Keine der VDMDBG-Funktionen arbeiten mit 16-Bit-DOS-Anwendungen. DOS VDMs auflisten, müssen Sie eine andere Methode verwenden. Erstens konnte Sie VDMEnumProcessWOW() verwenden, um eine Übersicht über alle Win16 VDMs und auflisten alle Instanzen des NTVDM.exe mit einigen anderen Schema (z. B. PSAPI-). Alle NTVDM.exe aus der vollständigen-Enumeration, die nicht in der Liste Win16 ist eine VDM DOS. Erstellen, und beenden 16-Bit-DOS-Anwendungen mit CreateProcess() und TerminateProcess().

Eigenschaften

Artikel-ID: 182559 - Geändert am: Samstag, 22. Februar 2014 - Version: 3.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Win32 Application Programming Interface, wenn verwendet mit:
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Keywords: 
kbnosurvey kbarchive kbmt kbapi kbhowto kbkernbase kbthread KB182559 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 182559
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com