Если я пытаюсь создать блок среды из 32-битного процесса (в 64-битной ОС) с помощью CreateEnvironmentBlock (), блок среды, который я получаю, кажется в основном правильным, но имеет несколько отличий от того, который создается автоматическипо CreateProcess.В частности, PROCESSOR_ARCHITECTURE обычно представляет собой x86 для 32-разрядных процессов, но один из CreateEnvironmentBlock имеет значение amd64.
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);
Создает следующий вывод:
ADMSOURCE: \ ddwds02 \ platform8 \ DesktopPersonalisation \Win7 \ GO \ Source \ adm ALLUSERSPROFILE: C: \ ProgramData APPDATA: C: \ Users \ bens \ AppData \ Roaming asl.log: назначение = файл AS_WDK6_DIR: C: \ WinDDK \ 6000 AS_WDK7_DIR: C: \ WinDDK \ 7600.16385.0CLASSPATH:.; C: \ Program Files (x86) \ Java \ jre6 \ lib \ ext \ QTJava.zip CommonProgramFiles: C: \ Program Files (x86) \ Общие файлы CommonProgramFiles (x86): C: \ Program Files (x86)\ Common Files CommonProgramW6432: C: \ Program Files \ Common Files COMPUTERNAME: APWADEV03 ComSpec: C: \ Windows \ system32 \ cmd.exe CYGWIN: nodosfilewarning DEFAULT_CA_NR: РАЗРАБОТКА CA100: c: \ development DEVLIBS: C: \ development \ libs FP_NEC_HOSTНЕТ ДОМА: c: \ users \ bens HOMEDRIVE: C: HOMEPATH: \ Users \ bens ВКЛЮЧИТЬ: C: \ Program Files (x86) \ Microsoft Visual Studio .NET 2003 \ SDK \ v1.1 \ включая e \ LIB: C:\ Program Files (x86) \ Microsoft VisСтудия .NET 2003 \ SDK \ v1.1 \ Lib \ LOCALAPPDATA: C: \ Users \ bens \ AppData \ Local LOCALHOMESHARE: C: \ Users \ bens LOGONSERVER: \ APWADC01 NUMBER_OF_PROCESSORS: 2 ОС: Windows_NT PATHEXT: .COM;EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .JSE; .WSF; .WSH; .MSC PROCESSOR_ARCHITECTURE: AMD64170a ProgramData: C: \ ProgramData ProgramFiles: C: \ Program Files (x86) ProgramFiles (x86): C: \ Program Files (x86) ProgramW6432: C: \ Program Files PSModulePath: C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ PUBLIC: C: \ Users \ Public PVC_DDK_DIR: C: \ WinDDK \ 6000 QTJAVA: C: \ Program Files (x86) \ Java \ jre6 \ lib \ ext \ QTJava.zip SESSIONNAME: Консоль SP2C_ROOT: C: \Разработка \ 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 \Инструменты \ VS90COMNTOOLS: c: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \ Tools \ windir: C: \ Windows WIX: C: \ Program Files (x86) \ XML установщика Windows v3 \ WTTBIN: C: \ ProgramФайлы \ Диспетчер тестирования драйверов Microsoft \ Controller \ _NT_SYMBOL_PATH: srv * c: \ websymbols *http://msdl.microsoft.com/download/symbols;sr v * c: \ pdbs PATH: C: \ Perl \ site \ bin; C: \ Perl \ bin; C: \ Windows \system32; C: \ Windows; C: \ Windows \ Syst em32 \ Wbem; C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files (x86) \ GTK 2-Runtime \ bin; C: \Программные файлы \ Broadcom \ Broadcom 802.11 \ Driver; C: \ Program Files \ Диспетчер тестирования драйверов Microsoft \ Controller \; C: \ Program Files (x86) \ FogBugz \ Клиент командной строки FogBugz; C: \ Program Files (x86) \ MicrosoftSQL Server \ 100 \ Tools \ Binn \; C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \; C: \ Program Files \ Microsoft SQL Server \ 100 \ DTS \ Binn \; C: \ Программа Files (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \; C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ DTS \ B inn \; C: \ Program Files \ TortoiseSVN\ bin; C: \ Program Files \ SlikSvn \ bin \; C: \ cygwinx \ b in; C: \ Program Files \ Microsoft Windows Performance Toolkit \; C: \ Program Files (x86) \ Общие файлы \ Teleca Shared; C: \ Program Files (x86) \ QuickTime \ QTSystem \; C: \ Progr am Files (x86) \ AMD \ CodeAnalyst \ bin; C: \ Program Files (x86) \ Nmap; c: \ Users \ bens \ scr ipts \win; C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \; C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin;
Так что, CreateEnvironmentBlock просто сломался на wow64? Кроме того, системная среда, кажется, определена в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment
Почему же нет wow64-эквивалента этого?