2012-05-09 3 views
0

특정 시점에서 각 로컬 사용자 계정에서 제거해야하는 특정 레지스트리 키 (소프트웨어에서 생성)가 있습니다. 따라서 사용자 하이브를로드 한 다음 SHDeleteKey를 사용하여 키가 비어 있지 않으므로 작업을 완료하려고합니다. 그러나 SHDeleteKey는 항상 LSTATUS 2 (ERROR_FILE_NOT_FOUND)를 반환합니다.레지스트리 : 시스템 내의 각 로컬 사용자에 대한 키 삭제

각 사용자의 레지스트리 키는 내가 작동하는 것 같다 내 코드 내에서 필요한 권한을 설정

먼저 HKCU \ SOFTWARE \ XYZ 아래에 위치한다 (발을 반환하는 TRUE입니다) :

(...) 
HANDLE th; 
LUID rsto; 
LUID bckp; 
TOKEN_PRIVILEGES tp; 
TOKEN_PRIVILEGES tp2; 
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &th); 
LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &rsto); 
LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &bckp); 
tp.PrivilegeCount = 1; 
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
tp.Privileges[0].Luid = rsto; 
tp2.PrivilegeCount = 1; 
tp2.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
tp2.Privileges[0].Luid = bckp; 
BOOL p = AdjustTokenPrivileges(th, 0, &tp, 1024, 0, 0); 
BOOL p2 = AdjustTokenPrivileges(th, 0, &tp2, 1024, 0, 0); 
    (...) 

그런 다음 RegiveKey를 사용하여 사용자 하이브를로드합니다. std :: string 연결에는 해당 ntuser.dat 파일에 대한 경로가 들어 있습니다. username은 로컬 사용자 계정 이름입니다. 그래서 하이브가 HKEY_USERS \ 사용자 이름 아래에로드해야 :

(...) 
    k = username + "\\Software\\XYZ"; 
    result = SHDeleteKey(HKEY_USERS, k.c_str()); 

그리고 지금 2 의 값을 갖는 결과 그러나 키가 존재 :

(...) 
DWORD result = RegLoadKey(HKEY_USERS, username.c_str(), connection.c_str()); 
return result == ERROR_SUCCESS; 
    (...) 

는 지금, 나는 삭제하려고합니다.

내가 뭘 잘못하고 있니? 나는 문제가 어딘가 수 RegLoadKey에 할 필요가 실현 : 는

정보 업데이트]

는 ... 사전에 감사합니다. 명령 줄 (REG.exe load "HKU \ username"...)을 통해 하이브를로드하면 regedit.exe 내의 HKEY_USERS 아래에 "username"노드가 표시됩니다. 모든 하위 노드는 해당 노드 아래에로드됩니다. RegLoadKey 다음에 프로그램을 일시 중지하면 HKEY_USERS 노드에도 "username"노드가 표시되지만 노드는 비어있는 것으로 시각화되므로 사용할 수있는 자식 노드가 없습니다. 어떻게 이런 일이 발생할 수 있습니까? 이 문제는 나를 괴롭히는 것입니다.

+0

\\ Software \\ Wow6432Node \\ XYZ를 사용해 보셨습니까? – PhilMY

+0

그것은 32 비트 시스템입니다. 언급하는 것을 잊어 버렸습니다. 죄송합니다. – mbue

+1

나는 이것을하기 위해 작은 도우미 EXE를 작성했지만 (모든 프로파일에서 키를 삭제하십시오), 하드 코딩 된 정보가 많이 있습니다. 아무도 해결책을 제공하지 않으면 나중에 오늘 밤 정리하고 게시 할 수 있습니다.) –

답변

0

오늘 내 코드를 살펴보면 "ntuser.DAT"대신 "ntuser.BAT"가로드 된 것을 보았습니다 (두 파일 모두 있음).

시간을 낭비하게되어 정말 유감입니다. : -/

관련 문제