0

새 사용자를 성공적으로 만들고 기본 제공 관리자 그룹에 사용자를 추가 한 후 새로 만든 사용자의 레지스트리를 편집하고 싶습니다 (이 프로그램은 관리자 권한의 프로그램입니다) . 나는 NetUserAdd(), NetLocalGroupAddMembers(), LogonUser(), 그리고 마지막으로 LoadUserProfile()을 호출하여 사용자 디렉토리가 존재합니다.새로 생성 된 사용자의 RegOpenCurrentUser (KEY_WRITE)

변명 정치 못한 코드를,하지만 내가 그 후 뭘 오전입니다 :

DuplicateTokenEx(hToken,TOKEN_ALL_ACCESS,&sa,SecurityImpersonation,TokenPrimary,&hNewToken); 
ImpersonateLoggedOnUser(hNewToken); 

HKEY hKey; 
LSTATUS stat = RegOpenCurrentUser(KEY_READ|KEY_WRITE, &hKey); 
// stat is 5 (ACCESS_DENIED) when KEY_WRITE is added, it 
// returns 0 (ERROR_SUCCESS) when it's just KEY_READ 

RegCloseKey(hKey); 
RevertToSelf(); 

CloseHandle(hNewToken); 

오류는 RegOpenCurrentUser() 라인에 있습니다. 해당 사용자의 HKU 레지스트리에 쓸 것을 요청하면 오류가 발생합니다. 그냥 사용하면 완벽하게 작동합니다. KEY_READ

내가하려는 일이 심지어 가능합니까? 사용자의 레지스트리 하이브도 아직 만들어 졌습니까? 아니면 사용자가 물리적으로 로그인하여 로그인해야합니까?

궁극적으로 내가하고 싶은 것은 새 사용자를위한 GPO를 만드는 것입니다.

답변

1

이미 사용자 프로필에 LoadUserProfile()이로드되어있는 경우 실제로는 RegOpenCurrentUser()을 사용할 필요가 없습니다. 대신 PROFILEINFOLoadUserProfile() 그 반환의 hProfile 필드를 사용할 수 있습니다

hProfile
유형 : HKEY_CURRENT_USER 레지스트리 하위 트리에

핸들을 처리합니다.

...

LoadUserProfile 호출이 성공적으로 반환의 hProfile 구성원 전체 액세스 (KEY_ALL_ACCESS) 연 키 핸들은 사용자의 서브 트리의 루트에 열린 레지스트리를 수신

.

+0

정말 고마워요! 당신은 모든 것을 훨씬 더 쉽고 똑바로 만들었습니다. – Andy