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;
}
내 관리자 계정에 fullcontrol 권한을 부여했습니다 ... – Arun