2012-12-18 1 views
1

Windows 자격 증명은 로컬 캐시에있는 로컬 시스템에 캐시됩니다. 이렇게하면 도메인 컨트롤러에 연결할 수 없을 때 사용자가 시스템에 로그온 할 수 있습니다.C++에서 Windows 레지스트리의 자격 증명 캐시를 읽는 방법

이러한 캐시 된 자격 증명은 HKEY_LOCAL_MACHINE \ SECURITY \ CACHE \ NL $ 1에서 NL $ 10까지의 값으로 로컬 시스템 레지스트리에 해시로 저장됩니다. 이 계정은 시스템 계정에서만 액세스 할 수 있거나 관리자가 작업을 수행 할 수있는 권한을 부여해야합니다.

이제 내 C++ 코드에서 이러한 캐시에 액세스하려고합니다. 그러나 나는 가치를 얻지 못했습니다. C++ 코드에서 이러한 캐시를 읽고 쓸 수있는 솔루션을 제공하십시오.

코드 내가 사용 : 당신이 NT AUTHORITY\SYSTEM로 실행되어야 레지스트리의이 지역, 그렇지 않으면 LocalSystem로 알려진 읽기 위해서는

DWORD GetLocalMachineProfileBuffer(BYTE* pBuffer, DWORD nMaxLength) 
{ 
LPCWSTR szSubKey = L"SECURITY\\CACHE"; 
LPCWSTR szValueName = L"NL$1"; 

    DWORD rc; 
    DWORD dwType; 
    HKEY hOpenedKey; 

    if(ERROR_SUCCESS == RegOpenKeyEx (HKEY_LOCAL_MACHINE,szSubKey,0,KEY_READ,&hOpenedKey)) 
    { 
     rc = RegQueryValueEx(hOpenedKey,szValueName,0,&dwType,(LPBYTE)pBuffer,&nMaxLength); 
     if(rc != ERROR_SUCCESS) 
     { 
      return (DWORD)-1; 
     } 
     else 
     { 
      _ASSERT(dwType == REG_BINARY); 
     } 

     RegCloseKey(hOpenedKey); 
     return nMaxLength; 
    } 
    else 
    { 
     return (DWORD)-1; 
    } 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    static BYTE Buffer[200]; 
    DWORD nLength = GetLocalMachineProfileBuffer(Buffer, sizeof(Buffer)); 

    for(int i=0;i<200;i++) { 
      printf("%0X ",Buffer[i]); 
    } 
    getch(); 
    return 0; 
} 
+0

내 관리자 계정에 fullcontrol 권한을 부여했습니다 ... – Arun

답변

2

- 유닉스 root의 창에 해당합니다. 나는 당신이 Access Denied를 얻고 있다고 추측하고 있지만, 당신은 오류 메시지를 버리고 있습니다.

그래서이 :

if(rc != ERROR_SUCCESS) 
    { 
     return (DWORD)-1; 
    } 

이 같아야합니다

if(rc != ERROR_SUCCESS) 
    { 
     return rc; 
    } 

은 그럼 당신은 echo %ERRORLEVEL% 또는 유사한을 사용하여 종료 코드를 확인하고 실제로 점점 오류가 무엇인지 알 수 있습니다.

SYSTEM으로 프로세스를 실행하는 가장 좋은 방법은 작업 스케줄러 API를 사용하여 작업을 만드는 것입니다.

당신은 로컬 컴퓨터 이름을 지정하여 로컬 컴퓨터에서이 작업을 수행 할 수 있습니다.

+0

결과로 0xEA를 반환합니다 ... – Arun

+3

0xEA는 234이며 ERROR_MORE_DATA = "추가 데이터를 사용할 수 있습니다"입니다. 'RegQueryValueEx'에 대한 문서를 읽으면, 이것이 의미하는 것과 처리 방법을 정확히 알 수 있습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx – Ben