Windows NT와 Windows 2000, Windows XP에서 VDMDBG 함수 방법

기술 자료 번역 기술 자료 번역
기술 자료: 182559 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

요약

심지어 32 비트 환경에서 프로그래밍하는 경우 경우가 16비트 응용 프로그램에서 작업하는 필요합니다. Windows NT에서 16비트 응용 프로그램은 VDM (가상 DOS 시스템) 내에서 실행됩니다. VDMDBG.dll 16 비트 응용 프로그램으로 작업하는 데 유용한 많은 기능이 들어 있습니다. 이 라이브러리는 Microsoft 플랫폼 SDK 일부입니다.

VDMDBG 기능을 열거하고, 만들고, VDM에 내에서 (작업) 16 비트 프로세스를 종료할 수 있는 좋은 방법을 제공합니다. 이 문서에서는 Microsoft Windows NT, Windows 2000 및 Windows XP에서 이러한 함수를 사용하는 방법을 설명합니다.

추가 정보

VDMDBG 함수를 사용할 때 프로젝트를 VDMDBG.lib 연결해야 합니다.

아래 언급된 VDMDBG 함수를 사용할 수 있는 기능 중 일부만 있습니다. 그러나 나와 없는 함수를 하나만 디버거에 관련이 있습니다.

VDM을 열거

VDMEnumProcessWOW() 함수는 모든 VDM을 실행 중인 16비트 Windows 작업을 열거할 수 있는 간단한 방법을 제공합니다. 이러한 VDM을 WowExec.exe 작업이 포함되어 있습니다. DOS VDM은 열거되지 않습니다.

이 함수의 선언은 다음과 같습니다:
   INT WINAPI VDMEnumProcessWOW( PROCESSENUMPROC fp, LPARAM lparam );
				
이 함수의 반환 값은 현재 실행 VDM을 수 또는 숫자 열거형된 전에 열거형 종료되었습니다. fp 콜백 함수에 대한 포인터입니다. 열거됩니다 각 VDM 함수가 호출됩니다. lParam 콜백 함수에 전달된 사용자 정의 값입니다.

PROCESSENUMPROC 같이 선언된:
   typedef BOOL ( WINAPI *PROCESSENUMPROC )(
      DWORD dwProcessId,
      DWORD dwAttributes,
      LPARAM lpUserDefined
   );
				
함수가 중지 열거형 또는 열거형. dwProcessId NTVDM.exe 프로세스의 프로세스 ID를. 계속하려면 FALSE 참 반환해야 합니다. 아래 언급된 VDM 함수를 호출할 때 이 ID가 필요합니다.

16 비트 Windows 작업 열거

VDMEnumTaskWOW() 및 VDMEnumTaskWOWEx() 특정 VDM 내에서 작업을 열거할 수 있습니다. VDMEnumTaskWOWEx() 콜백 함수 자세한 정보를 제공하는 두 차이입니다. 이러한 작업 열거 함수에 의해 VDMEnumProcessWOW() 반환되는 VDM을 경우에만 사용해야 합니다. 모든 DOS 응용 프로그램 자체 VDM 실행되므로 DOS VDM을 사용하여 의미가 없습니다.

선언 중인:
   INT WINAPI VDMEnumTaskWOW( DWORD dwProcessId, TASKENUMPROC fp,
                              LPARAM lparam );
				
   INT WINAPI VDMEnumTaskWOWEx( DWORD dwProcessId, TASKENUMPROCEX fp,
                                LPARAM lparam );
				
각 이러한 함수의 반환 값은 현재 표시된 VDM 내에서 실행 중인 작업 수 또는 숫자 열거형된 전에 열거형 종료되었습니다. dwProcessId VDM. fp 프로세스 ID 콜백 함수에 대한 포인터를 것입니다. 이 함수는 열거됩니다 각 작업에 대해 호출됩니다. lparam 콜백 함수에 전달된 사용자 정의 값입니다.

TASKENUMPROC 및 TASKENUMPROCEX 같이 정의됩니다:
   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
   );
				
이러한 함수를 중지 열거형 또는 열거형 계속하려면 FALSE 참 반환해야 합니다. hTask16에 대한 호출의 작업을 종료할 수 있습니다.

열거 예제

   // 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;
   }
				

16비트 작업 만들기

VDMStartTaskInWOW()는 VDM에 내에서 작업을 만듭니다. 선언은 다음과 같습니다:
   BOOL WINAPI VDMStartTaskInWOW( DWORD dwProcessId, LPSTR lpCommandLine,
                                  WORD wShow );
				
작업이 성공적으로 시작되지 않으면 이 함수의 반환 값은 TRUE, 그렇지 않으면 FALSE. dwProcessId VDM 프로세스 ID 입니다. lpCommandLine 16 비트 응용 프로그램의 모든 명령줄 매개 변수와 함께 파일 이름을 나타내는 문자열입니다. 창에 표시된 wShow가 나타냅니다. wShow 16 비트 ShowWindow() 함수에 유효한 값이 될 수 있습니다.

16비트 작업 종료

VDM 호출이 VDMTerminateTaskWOW() 내에서 작업을 종료할 수 있습니다. 선언은 다음과 같습니다:
   BOOL WINAPI VDMTerminateTaskWOW( DWORD dwProcessId, WORD htask );
				
작업을 성공적으로 종료될 경우 이 함수의 반환 값은 TRUE, 그렇지 않으면 FALSE. dwProcessId VDM 프로세스에서 ID를 hTask 작업에 대한 핸들을 것입니다. 이 작업 핸들은 VDMEnumTaskWOW() 또는 VDMEnumTaskWOWEx() 통해 얻을 수 있습니다.

이 메서드는 Win32 TerminateProcess() 대략적인 같습니다. 또한, 가능하면 사용하지 않아야 합니다. 데이터가 손실될 수 있으므로 작업을 명확하게 종료 차단율을 부여하지 않습니다. Win32 달리 종료된 작업 후 정리할 수 있는 WowExec 것은 아닙니다. 이 손상되어 사용할 수 있는 VDM 그대로 둘 수 있습니다. 작업이 정상적으로 종료할 수 있는 WM_CLOSE 해당 최상위 창으로 보냅니다.

16비트 DOS 응용 프로그램에 관련된 참고

VDMDBG 함수 중 어떤 것도 16비트 DOS 응용 프로그램과 함께 작동할. DOS VDM을 열거하는 데 다른 방법을 사용해야 합니다. 첫째, VDMEnumProcessWOW() 모든 Win16 VDM의 목록을 만들 수 및 NTVDM.exe PSAPI) 와 같은 다른 구성표를 사용하여 모든 인스턴스를 열거할 수 있습니다. Win16 목록에 없는 전체 열거형의 모든 NTVDM.exe VDM DOS 것입니다. 만들고 CreateProcess() 및 TerminateProcess() 16비트 DOS 응용 프로그램을 종료할 수 있습니다.

속성

기술 자료: 182559 - 마지막 검토: 2014년 2월 22일 토요일 - 수정: 3.4
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Win32 Application Programming Interface?을(를) 다음과 함께 사용했을 때
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
키워드:?
kbnosurvey kbarchive kbmt kbapi kbhowto kbkernbase kbthread KB182559 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

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