如何在Windows NT、Windows 2000和Windows XP中使用VDMDBG函數

來源:互聯網
上載者:User

摘要

即使是在 32位環境中編寫程式,也經常碰到處理 16位應用程式的情況。在 Windows NT 中,16位程式是運行在虛擬 DOS 機(VDM)中的。VDMDBG.dll 包含許多處理16位程式的有用函數,這個庫是 Platform SDK 的一部分。

VDMDBG 中的函數提供了很好的方式在 VDM 中枚舉、建立和終止 16位進程(任務)。本文將描述如何在Windows NT、Windows 2000 和 Windows XP 中使用這些函數。

如果需要使用 VDMDBG 函數,你的工程必須連結 VDMDBG.lib。

下面提及的 VDMDBG 函數僅僅是一個子集。未提及的函數只與調試器有關。

枚舉 VDMs

VDMEnumProcessWOW() 函數提供了一種簡單的方式來枚舉所有 運行 Windows 任務的 VDMs。這些 VDMs 包含 WowExec.exe 任務。DOS VDMs 不在枚舉之列。 該函數的聲明如下:INT WINAPI VDMEnumProcessWOW( PROCESSENUMPROC fp, LPARAM lparam );

該函數的傳回值是當前啟動並執行 VDMs 數,或者終止枚舉前的枚舉數目。fp 是一個回呼函數指標。該函數針對被枚舉的 VDM 被調用一次。lParam 是使用者定義的值,這個值被傳遞給回呼函數。

PROCESSENUMPROC 的聲明如下:

typedef BOOL ( WINAPI *PROCESSENUMPROC )(
DWORD dwProcessId,
DWORD dwAttributes,
LPARAM lpUserDefined
);

這個函數返回 TRUE 停止枚舉,返回 FALSE 繼續枚舉。dwProcessId 是 NTVDM.exe 進程ID。在調用其它VDM函數時(下面會提到這些函數),你會需要此 ID。

枚舉 16-位 Windows 任務

你可以用 VDMEnumTaskWOW() 和 VDMEnumTaskWOWEx() 在特定的 VDM 中枚舉任務。兩者的差別是 VDMEnumTaskWOWEx() 為回呼函數提供更多的資訊。你只能使用 VDMEnumProcessWOW() 返回的 VDMs 來調用這些任務枚舉函數。用 DOS VDMs 是沒有意義的,因為 DOS 應用程式運行在自己的 VDM 中。這兩個函數的惡聲明如下:

INT WINAPI VDMEnumTaskWOW( DWORD dwProcessId, TASKENUMPROC fp,LPARAM lparam );
INT WINAPI VDMEnumTaskWOWEx( DWORD dwProcessId, TASKENUMPROCEX fp,
LPARAM lparam );

這兩個函數的傳回值是當前運行在指定 VDM 中的任務數,或者每局終止前的枚舉數。dwProcessId 是 VDM 的惡進程ID。fp 是指向回呼函數的指標。每個被枚舉的任務都調用該函數。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
);

這些函數返回 TRUE 停止枚舉,返回 FALSE 繼續枚舉。你可以在某個調用中用 hTask16 終止任務。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.