Search code examples
visual-c++windows-servicesregistry

Can I Read Windows Registry From Windows Service in VC++?


Can I Read Windows Registry From Windows Service in VC++ ?

I have written code to read from Registry in MFC Application.It works fine but the same code does not work in Windows Service project.

My code looks like this:

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 

Solution

  • HKEY_CURRENT_USER refers to the user the process is running as. Your service will likely run as LocalSystem, not as you. Best bet is to store information under HKEY_LOCAL_MACHINE.