我使用微軟的CreateProcessWithLogonW function以特定用戶身份運行程序。在幾乎所有的測試場景中,一切都很好。我們的代碼與微軟網頁上的例子類似。問題出現在Windows Vista上。我們創建使用環境塊:CreateEnvironmentBlock返回塊對於Windows上的CreateProcessWithLogon太大
CreateEnvironmentBlock(&lpvEnv, hToken, TRUE)
我們再通過這CreateProcessWithLogonW:
CreateProcessWithLogonW(argv[1], NULL, argv[2],
LOGON_WITH_PROFILE, NULL, argv[3],
CREATE_UNICODE_ENVIRONMENT, lpvEnv, szUserProfile,
&si, &pi)
的問題是環境塊超過5120個字符大。我已經看到了這個提到的唯一位置是在微軟頁面的評論部分:
「關於環境塊 環境塊與參數‘lpEnvironment’不得包含超過5120個字符傳遞的大小限制無證。包括結尾的\ 0字符和尾隨\ 0塊分隔符
如果環境塊超過該限制,則調用將發出錯誤「0x000006F7:存根收到壞數據。」
在Windows 7 SP1 ,所記錄的限制是環境32767字節,每個8192字節變量。但是,CreateProcessWithLogonW函數尚未適應這些新的限制。它仍然不能接受超過5120個字符。
對此有什麼可以做的嗎?我很猶豫要砍掉環境塊。
您是否嘗試過使用'CreateProcessAsUser'來代替? – 2013-03-15 04:06:28