トップ回答者
CreateProcessで起動したプロセスで一部のレジストリが見えない

質問
-
皆様お世話になります。
問題を絞り込んだサンプルプログラム(Visual Studio Express 2015 で構築)を下記に示しますが、これで起動した Powershellで、dir HKLM:\Software\Microsoft\Office\14.0\Common を実行すると、あるはずのレジストリの幾つが見えません。
Powershell の代わりに cmd.exe を起動し、regedit で見ても同じです。
見えないレジストリに再現性がありますが、問題のキーに Users の読取権は存在しますし、Administrator で実行しても同じ症状です。
CreateProcess の使い方の問題と思われますが、下記で何が問題か分かりましたらご教示頂けますと幸いです。
#include "windows.h" int main() { STARTUPINFO si = {sizeof si}; PROCESS_INFORMATION pi = { 0 }; CreateProcess(L"C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", L"Powershell.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); return 0; }
念のため、regeditの画像も添付します。
本来のレジストリは下記ですが、
CreateProcessで起動したプロセスから見たレジストリが下記です。
実害として、InstallRoot が調べられなくて困っています。
Windows10 Pro 64bit バージョン1803 です。
よろしくお願いします。
回答
-
HKEY_LOCAL_MACHINE の内容や C:¥Windows¥System32 の実態はそれを見ようとするプロセスが 32bit か 64bit かによって変わるように実装されています。
64bit 環境で実行する場合はそれを意識する必要があります。
端的には CreateProcesd するときのパスを System32 ではなく、SysNative にすれば良いとは思いますが、同じプログラムを 32bit で併用する場合は一工夫必要かもしれません。
- 回答としてマーク M14Cluster 2019年8月26日 5:06
すべての返信
-
HKEY_LOCAL_MACHINE の内容や C:¥Windows¥System32 の実態はそれを見ようとするプロセスが 32bit か 64bit かによって変わるように実装されています。
64bit 環境で実行する場合はそれを意識する必要があります。
端的には CreateProcesd するときのパスを System32 ではなく、SysNative にすれば良いとは思いますが、同じプログラムを 32bit で併用する場合は一工夫必要かもしれません。
- 回答としてマーク M14Cluster 2019年8月26日 5:06