やりたいのは、HKLM\SYSTEM\CurrentControlSet\Enum\NewKey
というように保護されたレジストリ以下に新しいKeyを作ることです。
RegSetKeySecurity などを使えばいいのだろうか?とも思うのですが
うまく行きません。
情報をお持ちの方がいらっしゃいましたら、サンプルコードを示して
頂けませんでしょうか?
RegEdt32でパーミッションを変更すれば書き込めるので、自作アプリ
からでも可能だとは思うのですが・・・
よろしくお願いします。
本の名前:Win32システムサービスプログラミング
発行社名:(株)プレンティスホール
値段:¥5631+税金
下記の処理は
”guest”というユーザーだけがアクセス可能なレジストリキーを
作成するコードだそうです。
// regsec.cpp
#include <windows.h>
#include <iostream.h>
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
BYTE aclBuffer[1024];
PACL pacl=(PACL)&aclBuffer;
BYTE sidBuffer[100];
PSID psid=(PSID) &sidBuffer;
DWORD sidBufferSize = 100;
char domainBuffer[80];
DWORD domainBufferSize = 80;
SID_NAME_USE snu;
LONG result;
HKEY regKey;
DWORD disposition;
void main(void)
{
InitializeSecurityDescriptor(&sd,
SECURITY_DESCRIPTOR_REVISION);
InitializeAcl(pacl, 1024, ACL_REVISION);
LookupAccountName(0, "guest", psid,
&sidBufferSize, domainBuffer,
&domainBufferSize, &snu);
AddAccessAllowedAce(pacl, ACL_REVISION,
GENERIC_READ, psid);
SetSecurityDescriptorDacl(&sd, TRUE, pacl,
FALSE);
sa.nLength= sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;
sa.lpSecurityDescriptor = &sd;
result = RegCreateKeyEx(HKEY_CURRENT_USER,
"junk", 0, 0, REG_OPTION_VOLATILE,
KEY_ALL_ACCESS, &sa, ®Key,
&disposition);
cout << result << endl;
RegCloseKey(regKey);
}