一个关于NT服务程序的问题,巨奇怪!!
以下是我用于获取远程机器注册表的代码:
DWORD CHostArray::ConnectRegistry(CString host, PHKEY hKey)
{
PTHREAD_VAL val = NULL;
val = new THREAD_VAL;
val->hkey = hKey; // = NULL;
sprintf(val->host, "%s", host);
DWORD threadID;
HANDLE hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, (LPVOID)val, 0, &threadID );
DWORD result = WaitForSingleObject(hThread, WAIT_TIME);
DWORD status = 53; // TIME_OUT
if ( result == 0 ) status = val->status;
CloseHandle(hThread);
delete val;
return status;
}
DWORD WINAPI CHostArray::ThreadFunc(LPVOID pParam)
{
PTHREAD_VAL val;
val = (PTHREAD_VAL)pParam;
val->status = ::RegConnectRegistry(val->host, HKEY_LOCAL_MACHINE, val->hkey);
return 0;
}
此代码在debug模式下运行正常,但是一作为NT服务运行,获取远程机器的注册表就失败(但是自己机器的注册表可以获取),好像报A specified logon session does not exist. It may already have been terminated.错。
服务创建的代码如下:
schService = CreateService(
schSCManager, // SCManager database
TEXT(theApp.m_SZSERVICENAME), // name of service
TEXT(theApp.m_SZSERVICEDISPLAYNAME), // name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
szPath, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
TEXT(theApp.m_SZDEPENDENCIES),// dependencies
NULL, // LocalSystem account
NULL); // no password
请搞首赐教,感谢,分数献上。