Windowsクレデンシャルは、ローカルキャッシュと呼ばれるローカルシステムにキャッシュされます。これにより、ユーザーはドメインコントローラーに接続できないときにシステムにログオンできます。
これらのキャッシュされたクレデンシャルは、ハッシュとしてローカルシステムレジストリの値HKEY_LOCAL_MACHINE \ SECURITY \ CACHE \ NL$1からNL$10に保存されます。これにはシステムアカウントからのみアクセスできます。または、管理者にアクションを実行するためのアクセス許可を与える必要があります。
今、私は自分のc++コードからこれらのキャッシュにアクセスしようとしています。しかし、私は値を取得できませんでした。これらのキャッシュをC++コードから読み書きするためのソリューションを提供してください。
私が使用しているコード:
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;
}