Microsoft のCreateProcessWithLogonW 関数を使用して、特定のユーザーとしてプログラムを実行しています。私たちのテストシナリオのほとんどすべてで、すべてが素晴らしいです。私たちのコードは、Microsoft のページの例に似ています。Windows Vista で問題が発生します。以下を使用して環境ブロックを作成します。
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' で渡される環境ブロックには、終了の \0 文字と末尾の \0 ブロック区切り文字を含めて、5120 文字を超えてはなりません。
環境ブロックがその制限を超えると、呼び出しはエラー「0x000006F7: スタブが不正なデータを受信しました」を発行します。
Windows 7 SP1 では、文書化された制限は、環境に対して 32767 バイト、各変数に対して 8192 バイトです。ただし、CreateProcessWithLogonW 関数は、これらの新しい制限に適合していません。5120 文字を超える文字はまだ受け入れられません。
これについて何かできることはありますか?環境ブロックをハックするのをためらっています。