forked from Mirrors/wine-wine
advapi32: Added support for SERVICE_CONFIG_PRESHUTDOWN_INFO.
parent
b8704a4929
commit
e2172edca2
|
@ -1400,6 +1400,10 @@ BOOL WINAPI QueryServiceConfig2A(SC_HANDLE hService, DWORD dwLevel, LPBYTE buffe
|
|||
else configA->lpDescription = NULL;
|
||||
}
|
||||
break;
|
||||
case SERVICE_CONFIG_PRESHUTDOWN_INFO:
|
||||
if (buffer && bufferW && *needed<=size)
|
||||
memcpy(buffer, bufferW, *needed);
|
||||
break;
|
||||
default:
|
||||
FIXME("conversation W->A not implemented for level %d\n", dwLevel);
|
||||
ret = FALSE;
|
||||
|
@ -1421,7 +1425,7 @@ BOOL WINAPI QueryServiceConfig2W(SC_HANDLE hService, DWORD dwLevel, LPBYTE buffe
|
|||
{
|
||||
DWORD err;
|
||||
|
||||
if(dwLevel != SERVICE_CONFIG_DESCRIPTION) {
|
||||
if(dwLevel!=SERVICE_CONFIG_DESCRIPTION && dwLevel!=SERVICE_CONFIG_PRESHUTDOWN_INFO) {
|
||||
FIXME("Level %d not implemented\n", dwLevel);
|
||||
SetLastError(ERROR_INVALID_LEVEL);
|
||||
return FALSE;
|
||||
|
@ -2051,6 +2055,10 @@ BOOL WINAPI ChangeServiceConfig2A( SC_HANDLE hService, DWORD dwInfoLevel,
|
|||
HeapFree( GetProcessHeap(), 0, faw.lpRebootMsg );
|
||||
HeapFree( GetProcessHeap(), 0, faw.lpCommand );
|
||||
}
|
||||
else if (dwInfoLevel == SERVICE_CONFIG_PRESHUTDOWN_INFO)
|
||||
{
|
||||
r = ChangeServiceConfig2W( hService, dwInfoLevel, lpInfo);
|
||||
}
|
||||
else
|
||||
SetLastError( ERROR_INVALID_PARAMETER );
|
||||
|
||||
|
|
|
@ -1896,6 +1896,7 @@ static void test_queryconfig2(void)
|
|||
DWORD expected, needed;
|
||||
BYTE buffer[MAX_PATH];
|
||||
LPSERVICE_DESCRIPTIONA pConfig = (LPSERVICE_DESCRIPTIONA)buffer;
|
||||
SERVICE_PRESHUTDOWN_INFO preshutdown_info;
|
||||
static const CHAR servicename [] = "Winetest";
|
||||
static const CHAR displayname [] = "Winetest dummy service";
|
||||
static const CHAR pathname [] = "we_dont_care.exe";
|
||||
|
@ -2062,6 +2063,33 @@ static void test_queryconfig2(void)
|
|||
ret = pQueryServiceConfig2W(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer, needed,&needed);
|
||||
ok(ret, "expected QueryServiceConfig2W to succeed\n");
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pQueryServiceConfig2W(svc_handle, SERVICE_CONFIG_PRESHUTDOWN_INFO,
|
||||
(LPBYTE)&preshutdown_info, sizeof(preshutdown_info), &needed);
|
||||
if(!ret && GetLastError()==ERROR_INVALID_LEVEL)
|
||||
{
|
||||
/* Win2k3 and older */
|
||||
win_skip("SERVICE_CONFIG_PRESHUTDOWN_INFO not supported\n");
|
||||
goto cleanup;
|
||||
}
|
||||
ok(ret, "expected QueryServiceConfig2W to succeed (%d)\n", GetLastError());
|
||||
ok(needed == sizeof(preshutdown_info), "needed = %d\n", needed);
|
||||
ok(preshutdown_info.dwPreshutdownTimeout == 180000, "Default PreshutdownTimeout = %d\n",
|
||||
preshutdown_info.dwPreshutdownTimeout);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
preshutdown_info.dwPreshutdownTimeout = -1;
|
||||
ret = pChangeServiceConfig2A(svc_handle, SERVICE_CONFIG_PRESHUTDOWN_INFO,
|
||||
(LPVOID)&preshutdown_info);
|
||||
ok(ret, "expected ChangeServiceConfig2A to succeed (%d)\n", GetLastError());
|
||||
|
||||
ret = pQueryServiceConfig2W(svc_handle, SERVICE_CONFIG_PRESHUTDOWN_INFO,
|
||||
(LPBYTE)&preshutdown_info, sizeof(preshutdown_info), &needed);
|
||||
ok(ret, "expected QueryServiceConfig2W to succeed (%d)\n", GetLastError());
|
||||
ok(needed == sizeof(preshutdown_info), "needed = %d\n", needed);
|
||||
ok(preshutdown_info.dwPreshutdownTimeout == -1, "New PreshutdownTimeout = %d\n",
|
||||
preshutdown_info.dwPreshutdownTimeout);
|
||||
|
||||
cleanup:
|
||||
DeleteService(svc_handle);
|
||||
|
||||
|
|
Loading…
Reference in New Issue