한 걸음씩..

RegSystemToUser 본문

프로그래밍

RegSystemToUser

smdy0426 2024. 5. 22. 17:21
반응형
void RegSystemToUser()
{
     //////////////////////////////////////////////////////////////////////////
     // HKEY_CURRENT_USER
     //////////////////////////////////////////////////////////////////////////
     // Process ID를 Process Handle로 변경한다.
     DWORD dwPid = GetPIDFromShortFileName("explorer.exe");
     HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ  , FALSE, dwPid);

     // Process Handle이 NULL이면, Open Failed 에러
     if (hProcess == NULL)
          return;

     // 프로세서의 실행자 SID를 찾는다.
     // 서비스 프로그램은 Local System 계정으로 로그인하였으므로, HKEY_CURRENT_USER로 레지스트리를
     // Open할 경우 App와 다른 레지스트리 키로 접근이 된다.
     // 그러므로, Process Token에서, SID를 확보해서 레지스트리를 직접 찾아 가야 한다.

     HANDLE hTProcess;
     DWORD dwSize;

     // Process 핸들로 토큰을 얻는다. (Vista이므로, 될수 있으면 권한은 낮게... QUERY 권한만으로 접근)
     if (OpenProcessToken(hProcess, TOKEN_QUERY, &hTProcess) == FALSE)
     {
          CloseHandle(hProcess);
          return;
     }

     // NULL 값으로 토큰 정보를 요청하여,  토큰 정보가 저장될 버퍼의 크기를 받아온다.
     GetTokenInformation(hTProcess, TokenUser, NULL, 0, &dwSize);

     TOKEN_USER *sidUser = (TOKEN_USER *)malloc(dwSize);
     if (GetTokenInformation(hTProcess, TokenUser, sidUser, dwSize, &dwSize) == 0)
     {

          free(sidUser);
          CloseHandle(hTProcess);
          CloseHandle(hProcess);

          return;
     }

     // SID는 문자열이 아니고 구조체형이다.
     // 문자형 SID로 변경한다.
     LPTSTR pszSid;
     ConvertSidToStringSid(sidUser[0].User.Sid, &pszSid);
     free(sidUser);
     CloseHandle(hTProcess);

     CString strUserSID = pszSid;
     LocalFree(pszSid);

     // 레지스트리 오픈
     strUserSID += L"\\Software\\microsoft\\windows\\currentversion\\run";
     if( RegOpenKeyEx( HKEY_USERS, strUserSID, 0, KEY_READ, &hTestKey) == ERROR_SUCCESS )
     {
          //여기서 부턴 그냥 원래 하던데로 레지값 읽으면 됨
     }
}
반응형

'프로그래밍' 카테고리의 다른 글

AES GCM Mode  (0) 2024.05.22
jqGrid ip  (0) 2024.05.22
[ C++ ] 데이터모델  (2) 2014.09.21
SplitString ( CString Parser )  (0) 2014.07.14
GetLogOnUserName  (0) 2014.07.14