2011-07-19 19 views
2

CreateEnvironmentBlock()を使用して32ビットプロセス(32ビットプロセス内)から環境ブロックを作成しようとすると、 CreateProcessによって自動的に作成されるものとはいくつかの違いがあります。特にPROCESSOR_ARCHITECTUREは32ビットプロセスではx86ですが、CreateEnvironmentBlockからのものはamd64です。WOW64プロセスでCreateEnvironmentBlockが私にPROCESSOR_ARCHITECTURE = AMD64を与える理由

ADMSOURCE:\ ddwds02 \ platform8 \ DesktopPersonalisation \ Win7の\ GO \ソース\ ADM ALLUSERSPROFILE:C:\はProgramData APPDATA:C:\ Users \ユーザーベンズ\

BOOL bResult = FALSE; 
LPWSTR wszEnvBlock = NULL; 
HANDLE tokenHandle; 

OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &tokenHandle); 

bResult = ::CreateEnvironmentBlock((LPVOID*)&wszEnvBlock, tokenHandle, TRUE); 

LPWSTR wszCurrentItem = wszEnvBlock; 
LPWSTR wszEqualsSign = NULL; 
LPWSTR wszCurrentItemInuse = NULL; 

ATL::CStringW wstrCurrentName; 
ATL::CStringW wstrCurrentValue; 

while (L'\0' != *wszCurrentItem) 
{ 
    // Find the equals and temporarily set it to NULL 
    wszCurrentItemInuse = wszCurrentItem; 
    wszEqualsSign = wcschr(wszCurrentItem, L'='); 
    *wszEqualsSign = L'\0'; 

    // Copy the Name and then set the equals back as it was 
    wstrCurrentName = wszCurrentItem; 
    *wszEqualsSign = L'='; 

    // Move the current item to the next character after the equals sign, 
    // Then copy the Value 
    wszCurrentItem = ++wszEqualsSign; 
    wstrCurrentValue = wszCurrentItem; 

    // Move the current item to the next character after the terminating NULL character. 
    wszCurrentItem = wcschr(wszCurrentItem, L'\0'); 
    wszCurrentItem++; 

    // Insert the two read strings into the map 
    wprintf(L"%s:%s\n", wstrCurrentName, wstrCurrentValue); 
} 

bResult = DestroyEnvironmentBlock((LPVOID)wszEnvBlock); 

は、以下の出力を生成します先=ファイルAS_WDK6_DIR:C:\ WinDDK 6000 \ AS_WDK7_DIR:C:\ WinDDK \ 7600.16385.0 CLASSPATH: asl.logローミングのAppData \; C:\プログラムファイル (x86の)\ Javaの\ jre6に\ libに\ ext \ QTJava.zip CommonProgramFiles:C:¥Program Files (x86)¥Common Files CommonProgramFiles(x86):C:¥Program FilesC:\ Program Files \ Common Files COMPUTERNAME:APWADEV03 ComSpec:C:\ Windows \ system32 \ cmd.exe CYGWIN:nodosfilewarning DEFAULT_CA_NR:CA100開発:c:\ development DEVLIBS:C Visual Studio .NET 2003 \ SDK \ v1:¥development¥libs FP_NO_HOST_CHECK:いいえHOME:c:\ users \ bens HOMEDRIVE:C:HOMEPATH:¥Users¥bensインクルード:C:¥Program Files (x86)\ Microsoft Visual Studio .NET 2003 \ SDK \ v1 1 \ includ e \ LIB:C:\ Program Files(x86)\ Microsoft Visual Studio .NET 2003 \ SDK \ v1.1 \ Lib \ LOCALAPPDATA:C:\ Users \ bens \ AppData \ Local LOCALHOMESHARE:C: \ Users \ bens LOGONSERVER:\ APWADC01 NUMBER_OF_PROCESSORS:2 OS:Windows_NT パスワード:.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC PROCESSOR_ARCHITECTURE:AMD64 PROCESSOR_ARCHITEW6432:AMD64 PROCESSOR_IDENTIFIER:ステッピングIntel64ファミリ6モデル23 10、 GenuineIntel PROCESSOR_LEVEL:6 PROCESSOR_REVISION:170A はProgramData:C:\はProgramData PROGRAMFILESします。C:\ Program Files(x86の) PROGRAMFILES(x86の):C C:\ Users \ Public PVC_DDK_DIR:C:\ WinDDK \ 6000 QTJAVA:¥Program Files(x86)ProgramW6432:C:¥Program Files PSModulePath:C:¥Windows¥system32¥WindowsPowerShell¥v1.0¥Modules¥ PUBLIC: C:¥Program Files¥ ¥Java¥jre6¥lib¥ext¥QTJava.zip SESSIONNAME:コンソール SP2C_ROOT:C:\ Development \ SP2C_Win7 SystemDrive:C: SystemRoot:C:\ Windows TEMP:C: Users \ bens \ AppData \ Local \ Temp TMP:C:\ Users \ bens \ AppData \ Local \ Temp USERPROFILE:C:\ Users \ bens VisualStudioDir:C:\ Users \ bens \ Documents \ Visual Studio 2010 VS100COMNTOOLS:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ VS71COMNTOOLS:C:\ Program Files(x86)\ Microsoft Visual Studio .NET 2003 \ Common7 \ T ools \ VS80COMNTOOLS:C:\ Program Files (x86)\ Microsoft Visual Studio 8 \ Common7 \ Tools \ VS90COMNTOOLS:c:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ C:\ Program Files \ Microsoft ドライバテストマネージャ\コントローラ\ _NT_SYMBOL_PATH:srv * c: \ websymbols * http://msdl.microsoft.com/download/symbols; sr v * c:\ pdbs C:\ Windows \ System32; C:\ Windows \ C:\ Windows \ Syst em32¥Wbem; C:¥Windows¥System32¥WindowsPowerShell¥C:¥Perl¥site¥bin; v1.0 \; C:\ Program Files (x86)\ GTK 2-Runtime \ bin; C:¥Program Files¥Broadcom¥Broadcom 802。11 \ドライバー; C:\プログラムファイル\のMicrosoftドライバテスト マネージャ\コントローラ\; C:\プログラムファイル(x86の)\ FogBugzの\ FogBugzのコマンド ラインクライアント; C:\プログラムファイル(x86の)\のMicrosoft SQL サーバー\ 100 \ツールBinnの\ \; C:\ 100の\ツールの\ Program Files \ Microsoft SQL Serverの\ Binnの\; C:100 \ DTS \ Binnの\ \ \プログラムファイル\ Microsof tののSQL サーバー; C:\プログラムファイルを( x86の)100の\ツール\ \のMicrosoft SQL サーバーに\ Binnの\ VSShell \ Common7 \ IDE \; C:\プログラムファイル (x86の)\ Microsoft SQL Serverの\ 100 \ DTS \ Bイン\; C:\プログラム ファイル\ TortoiseSVNの\ binに; C:\プログラムファイル\ SlikSvn \ binに\; C:\ cygwinx \ でB; C:\プログラムファイル\のMicrosoft Windowsパフォーマンスツールキット\; C:\プログラム ファイル(x86の)\ CommonのFiles \配し共有; C:\ Program Files (x86)\ Qu ickTime \ QTSystem \; C:\ PROGR AMファイル (x86の)\ AMD \ CodeAnalyst \ビン; C:\プログラムファイル (x86の)\ Nmapの; C:\ Users \ユーザーベンズ\ SCR IPTS \勝利; C:\プログラムVisual Studio 10.0 \; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin;ファイル(x86)\ Microsoft

したがって、CreateEnvironmentBlockはwow64でちょうど壊れていますか?また、システム環境は、HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environmentに定義されているようです。

どのようにこれに相当するwow64はありませんか?

+0

+1これは本当に変です... – Mehrdad

+0

うん、私はこれを見て最初ではないようです。多分それはバグでしょうか? http://www.eggheadcafe.com/microsoft/Platform-SDK-Shell/32819766/problems-with-createnvironmentblock-in-64bit-vista.aspx – Benj

+0

'バグがCreateEnviromentBlockであり、 しかし、製品チームは現在ありません修正が次のバージョンのWindowsにチェックインされているにもかかわらず、Vistaでそれを修正する計画を持っている.' ...あなたはWin7でこれを試しましたか? – Mehrdad

答えて

0

これはCreateEnvironmentBlock()のバグであり、MSはこの問題を認識しており、未定の未定のリリースでこれを修正すると約束しています。

関連する問題