Как прочитать кэш учетных данных из реестра Windows из Stack Overflow

Учетные данные 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;
}

1

Решение

Чтобы прочитать эту область реестра, вы ДОЛЖНЫ работать как NT AUTHORITY\SYSTEMиначе известный как LocalSystem — Windows эквивалент Unix root, Я предполагаю, что вы получаете отказано в доступе, но вы выбрасываете сообщение об ошибке.

Итак, это:

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

Должно быть так:

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

Затем вы можете проверить код выхода, используя echo %ERRORLEVEL% или подобный, и узнайте, какую ошибку вы действительно получаете.

Лучший способ запустить процесс как SYSTEM это создать работу с помощью API планировщика заданий.

Вы можете сделать это на локальном компьютере, указав имя локального компьютера.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]