Могу ли я прочитать реестр Windows из службы Windows в VC ++? - PullRequest
2 голосов
/ 01 марта 2011

Могу ли я прочитать реестр Windows из службы Windows в VC ++?

Я написал код для чтения из реестра в приложении MFC. Он работает нормально, но тот же код не работает в проекте службы Windows.

Мой код выглядит так:

TCHAR     szPasswordDecrypted[32] = _T("");
TCHAR*    szEncryptPwd = NULL ;

HKEY     hKey = NULL;
TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
DWORD    cbName;                   // size of name string 
TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
DWORD    cchClassName = MAX_PATH;  // size of class string 
DWORD    cSubKeys=0;               // number of subkeys 
DWORD    cbMaxSubKey;              // longest subkey size 
DWORD    cchMaxClass;              // longest class string 
DWORD    cValues;              // number of values for key 
DWORD    cchMaxValue;          // longest value name 
DWORD    cbMaxValueData;       // longest value data 
DWORD    cbSecurityDescriptor; // size of security descriptor 
FILETIME ftLastWriteTime;      // last write time


DWORD i, retCode; 

long lg = RegOpenKeyEx( HKEY_CURRENT_USER,
    TEXT("SOFTWARE\\NetworkDriveSolution"),
    0,
    KEY_READ,
    &hKey
    );

// Get the class name and the value count. 
retCode = RegQueryInfoKey(
    hKey,                    // key handle 
    achClass,                // buffer for class name 
    &cchClassName,           // size of class string 
    NULL,                    // reserved 
    &cSubKeys,               // number of subkeys 
    &cbMaxSubKey,            // longest subkey size 
    &cchMaxClass,            // longest class string 
    &cValues,                // number of values for this key 
    &cchMaxValue,            // longest value name 
    &cbMaxValueData,         // longest value data 
    &cbSecurityDescriptor,   // security descriptor 
    &ftLastWriteTime);       // last write time 

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

HKEY_CURRENT_USER относится к пользователю, от имени которого выполняется процесс.Ваш сервис, скорее всего, будет работать как LocalSystem, а не как вы.Лучше всего хранить информацию под HKEY_LOCAL_MACHINE.

0 голосов
/ 30 апреля 2017

Вы должны использовать HKEY_LOCAL_MACHINE. Вы должны иметь расчет времени в этом сервисе.

Также вы должны использовать API реестра. В основном RegNotifyChangeKeyValue(..) для мониторинга изменения события.

...