Учетные данные 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;
}
Чтобы прочитать эту область реестра, вы ДОЛЖНЫ работать как NT AUTHORITY\SYSTEM
иначе известный как LocalSystem
— Windows эквивалент Unix root
, Я предполагаю, что вы получаете отказано в доступе, но вы выбрасываете сообщение об ошибке.
Итак, это:
if( rc != ERROR_SUCCESS )
{
return (DWORD)-1;
}
Должно быть так:
if( rc != ERROR_SUCCESS )
{
return rc;
}
Затем вы можете проверить код выхода, используя echo %ERRORLEVEL%
или подобный, и узнайте, какую ошибку вы действительно получаете.
Лучший способ запустить процесс как SYSTEM
это создать работу с помощью API планировщика заданий.
Вы можете сделать это на локальном компьютере, указав имя локального компьютера.
Других решений пока нет …