如果 CreateProcessWithTokenW 函式建立子程序,STDIN、STDOUT 和 STDERR 重定向在 WOW64 子程序中就無法運作

套用到
Windows Server 2008 for Itanium-Based Systems Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Vista Enterprise 64-bit Edition Windows Vista Home Basic 64-bit Edition Windows Vista Home Premium 64-bit Edition Windows Vista Ultimate 64-bit Edition Windows Vista Business 64-bit Edition Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Enterprise Windows Server 2008 R2 for Itanium-Based Systems Windows Server 2008 R2 Standard Windows 7 Enterprise Windows 7 Home Basic Windows 7 Home Premium Windows 7 Professional Windows 7 Ultimate

症狀

請考慮以下案例:

  • 你有一台電腦運行的是 64 位元版本的 Windows Server 2008、Windows Vista、Windows 7 或 Windows Server 2008 R2。
  • 在這台電腦上,程序呼叫 CreateProcessWithTokenW 函式,建立一個子程序,該程序在 Windows 32 位元下執行, (Windows 64 位元) 64 位元。
  • WOW64 子程序用於將標準 (輸入導向 STDIN) ,標準輸出 (STDOUT) ,標準誤差 (STDERR) 。

在此情境中,重定向在 WOW64 子程序中無法運作。 因此,任何依賴重定向功能的應用程式或服務都無法運作。

原因

每個 WOW64child 程序都有兩個 Process Environment Blocks (PEB) 。 一個 PEB 用於 64 位元程序,另一個 PEB 用於在 WOW64 模擬環境中運行的 32 位元程序。

CreateProcessWithTokenW 函式僅將 STDIN、STDOUT 和 STDERR 的 handle 從父程序複製到 64 位元程序的 PEB。 然而,此函式不會將這些句柄複製到 PEB,適用於在 WOW64 模擬環境中執行的 32 位元程序。 此行為導致在 WOW64 下執行的子程序無法使用重定向的句柄。 因此,重定向失敗。

解決方式

Hotfix 資訊

Microsoft 已提供支援的熱修補程式。 不過,這個熱修正僅針對本文所述的問題進行修正。 此熱修正僅適用於遇到本文所述問題的系統。 這個熱修補可能會有額外的測試。 因此,如果您沒有受到此問題嚴重影響,我們建議您等待下一次包含此熱修補丁的軟體更新。

如果熱修補程式可供下載,這篇知識庫文章頂部有一個「熱修補丁下載可用」的區塊。 若此部分未出現,請聯絡 Microsoft 客服與支援以取得熱修正。

注意:如果發生其他問題或需要排除故障,您可能需要另行申請服務。 一般的支援費用將適用於不符合本次熱修正範圍的其他支援問題與問題。 欲查詢完整的 Microsoft 客戶服務與支援電話號碼清單,或建立獨立服務請求,請造訪以下 Microsoft 網站:

http://support.microsoft.com/contactus/?ws=support 注意「熱修正程式下載可用」表單顯示該熱修正程式所支援的語言。 如果你看不到你的語言,那是因為該語言沒有熱修正。

先決條件

要套用此熱修補,您的電腦必須運行以下其中一種作業系統:

  • Windows Vista 服務包 1 (SP1)
  • Windows Vista Service Pack 2 (SP2)
  • Windows Server 2008
  • Windows Server 2008 Service Pack 2 (SP2)
  • Windows 7
  • Windows Server 2008 R2

重新啟動需求

你必須在套用這個熱修補程式後重新啟動電腦。

登錄資訊

你不需要對登記清單做任何更改。

檔案詳細資訊

英文 (美國) 版本的熱修補程式安裝的檔案包含以下表格中列出的屬性。 這些檔案的日期與時間是以國際標準時間 (UTC) 表示。 本機電腦上這些檔案的日期與時間,是以您當地的時間和目前的日光節約時間 (DST) 的時差來顯示。 此外,當您對檔案執行特定作業時,其日期與時間可能會改變。

Windows Vista 與 Windows Server 2008 檔案資訊備註

重要的 Windows Vista 熱修補與 Windows Server 2008 熱修補都包含在同一套件中。 然而,熱修正請求頁面上只列出「Windows Vista」。 要申請適用於其中一個或兩個作業系統的熱修正套件,請選擇頁面中「Windows Vista」下列出的熱修正。 請一律參照文章中的<適用於>一節,以判定每個 Hotfix 適用的確切作業系統。

  • 可透過查看下列表格中所顯示的檔案版本號碼來識別套用至特定產品、SR_Level(RTM,SPn)及服務分支(LDR、GDR)的檔案:

    版本 產品 SR_Level 服務分支
    6.0.600
    1.
    22xxx
    Windows Vista 和 Windows Server 2008 SP1 LDR
    6.0.600
    2.
    22xxx
    Windows Vista 和 Windows Server 2008 SP2 LDR
  • 服務包 1 已整合於 Windows Server 2008 的發行版本中。

  • 每個環境安裝的 MANIFEST 檔案 (.manifest) 與 MUM 檔案 (.mum) 分別列於「Windows Server 2008 及 Windows Vista 的額外檔案資訊」章節中。 MUM 檔案與 MANIFEST 檔案,以及相關的安全目錄 (.cat) 檔案,對於維護更新元件的狀態極為重要。 屬性未列出的安全性目錄檔案是以 Microsoft 數位簽章簽署。

所有支援的 Windows Server 2008 和 Windows Vista x64 版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
Seclogon.dll 6.0.6001.22431 29,184 2009年5月12日 16:06 x64
Seclogon.dll 6.0.6002.22134 29,184 2009年5月12日 15:41 x64

針對所有支援的基於 Itanium 的 Windows Server 2008 版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
Seclogon.dll 6.0.6001.22431 57,856 2009年5月12日 15:46 IA-64
Seclogon.dll 6.0.6002.22134 57,856 2009年5月12日 15:33 IA-64

Windows 7 和 Windows Server 2008 R2 檔案資訊注意事項

重要 Windows 7 hotfixes 和 Windows Server 2008 R2 的 hotfixes 隨附於相同的套件中。 但是,Hotfix 要求頁面上的 Hotfix 會列在各自的作業系統中。 如果要請求適用於其中一或兩個作業系統的 Hotfix 套件,請選取頁面上列於「Windows 7/Windows Server 2008 R2」下方的 Hotfix。 請一律參照文章中的<適用於>一節,以判定每個 Hotfix 適用的確切作業系統。

  • 每一個環境安裝的 MANIFEST 檔(.manifest)和MUM 檔(.mum)皆會分別列在「Windows Server 2008 R2 和Windows 7 的其他檔案資訊」一節中。 對於維持已更新元件的狀態,MUM 及 MANIFEST 檔案及相關的安全性目錄 (.cat) 檔案都很重要。 屬性未列出的安全性目錄檔案是以 Microsoft 數位簽章簽署。

对于所有受支持的基于 x64 的 Windows 7 版本和 Windows Server 2008 R2 版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
Seclogon.dll 6.1.7600.20787 30,720 2010年8月21日 07:24 x64

適用於所有支援的 IA-64 版本 Windows Server 2008 R2

檔案名稱 檔案版本 檔案大小 日期 時間 平台
Seclogon.dll 6.1.7600.20787 65,024 2010年8月21日 06:29 IA-64

因應措施

為了解決這個問題,請呼叫 CreateProcessAsUser 函式來建立子程序。

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

更多資訊

欲了解更多關於 CreateProcessWithTokenW 函式的資訊,請造訪以下 Microsoft 網站:

http://msdn.microsoft.com/en-us/library/ms682434 (VS.85) .aspx 欲了解更多關於 CreateProcessAsUser 函式的資訊,請造訪以下 Microsoft 網站:

http://msdn.microsoft.com/en-us/library/ms682429 (VS.85) .aspx 欲了解更多資訊,請點擊以下文章編號以查看Microsoft知識庫中的文章:

824684 描述用於描述Microsoft軟體更新的標準術語

其他檔案資訊

Windows Vista 及 Windows Server 2008 的額外檔案資訊

所有支援的 x64 版本 Windows Vista 及 Windows Server 2008 的額外檔案

檔案名稱 Amd64_4a7908b357eecad45497e7a614da5ab2_31bf3856ad364e35_6.0.6001.22431_none_eff62086a34ac976.manifest
檔案版本 不適用
檔案大小 713
日期 (UTC) 2009年5月13日
時間 (UTC) 03:32
平台 不適用
檔案名稱 Amd64_e18aeae085cca5f39361c0ace1ecfedf_31bf3856ad364e35_6.0.6002.22134_none_c800fbe0d1aafeca.manifest
檔案版本 不適用
檔案大小 713
日期 (UTC) 2009年5月13日
時間 (UTC) 03:32
平台 不適用
檔案名稱 Amd64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6001.22431_none_48ed2db26d293c6b.manifest
檔案版本 不適用
檔案大小 7,582
日期 (UTC) 2009年5月12日
時間 (UTC) 1,930
平台 不適用
檔案名稱 Amd64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6002.22134_none_4ad6a0786a4cdd94.manifest
檔案版本 不適用
檔案大小 7,582
日期 (UTC) 2009年5月12日
時間 (UTC) 19:25
平台 不適用
檔案名稱 更新.mum
檔案版本 不適用
檔案大小 2,598
日期 (UTC) 2009年5月13日
時間 (UTC) 03:32
平台 不適用

所有支援的 IA-64 版本 Windows Server 2008 的附加檔案

檔案名稱 Ia64_23caceaa3d7286a9ff4a23775ef4da54_31bf3856ad364e35_6.0.6002.22134_none_d01b4e8816bf0190.manifest
檔案版本 不適用
檔案大小 711
日期 (UTC) 2009年5月13日
時間 (UTC) 03:32
平台 不適用
檔案名稱 Ia64_68069bedf1d5a4bd9f3dc637561ff507_31bf3856ad364e35_6.0.6001.22431_none_349d44d96d664fea.manifest
檔案版本 不適用
檔案大小 711
日期 (UTC) 2009年5月13日
時間 (UTC) 03:32
平台 不適用
檔案名稱 Ia64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6001.22431_none_ecd03624b4c9d431.manifest
檔案版本 不適用
檔案大小 7,572
日期 (UTC) 2009年5月12日
時間 (UTC) 19:14
平台 不適用
檔案名稱 Ia64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6002.22134_none_eeb9a8eab1ed755a.manifest
檔案版本 不適用
檔案大小 7,572
日期 (UTC) 2009年5月12日
時間 (UTC) 19:07
平台 不適用
檔案名稱 更新.mum
檔案版本 不適用
檔案大小 1,924
日期 (UTC) 2009年5月13日
時間 (UTC) 03:32
平台 不適用

有關 Windows 7 和 Windows Server 2008 R2 的其他檔案資訊

所有支援的 Windows 7 和 Windows Server 2008 R2 x64 版本的其他檔案

檔案名稱 Amd64_445df96a83014fe57068b08a79da6683_31bf3856ad364e35_6.1.7600.20787_none_20591bc8c261086c.manifest
檔案版本 不適用
檔案大小 713
日期 (UTC) 2010年8月21日
時間 (UTC) 12:03
平台 不適用
檔案名稱 Amd64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.1.7600.20787_none_48e4f3e3ce639760.manifest
檔案版本 不適用
檔案大小 4,810
日期 (UTC) 2010年8月21日
時間 (UTC) 08:37
平台 不適用
檔案名稱 更新.mum
檔案版本 不適用
檔案大小 1,886
日期 (UTC) 2010年8月21日
時間 (UTC) 12:03
平台 不適用

所有支援的 Windows Server 2008 R2 IA-64 版本的其他檔案

檔案名稱 Ia64_a48ab9ecdf2f4b1206e2ae93b7bb6a43_31bf3856ad364e35_6.1.7600.20787_none_172788f1fbdb93a7.manifest
檔案版本 不適用
檔案大小 711
日期 (UTC) 2010年8月21日
時間 (UTC) 12:03
平台 不適用
檔案名稱 Ia64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.1.7600.20787_none_ecc7fc5616042f26.manifest
檔案版本 不適用
檔案大小 4,808
日期 (UTC) 2010年8月21日
時間 (UTC) 1,708
平台 不適用
檔案名稱 更新.mum
檔案版本 不適用
檔案大小 1,684
日期 (UTC) 2010年8月21日
時間 (UTC) 12:03
平台 不適用