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;
|
else configA->lpDescription = NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SERVICE_CONFIG_PRESHUTDOWN_INFO:
|
||||||
|
if (buffer && bufferW && *needed<=size)
|
||||||
|
memcpy(buffer, bufferW, *needed);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("conversation W->A not implemented for level %d\n", dwLevel);
|
FIXME("conversation W->A not implemented for level %d\n", dwLevel);
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
|
@ -1421,7 +1425,7 @@ BOOL WINAPI QueryServiceConfig2W(SC_HANDLE hService, DWORD dwLevel, LPBYTE buffe
|
||||||
{
|
{
|
||||||
DWORD err;
|
DWORD err;
|
||||||
|
|
||||||
if(dwLevel != SERVICE_CONFIG_DESCRIPTION) {
|
if(dwLevel!=SERVICE_CONFIG_DESCRIPTION && dwLevel!=SERVICE_CONFIG_PRESHUTDOWN_INFO) {
|
||||||
FIXME("Level %d not implemented\n", dwLevel);
|
FIXME("Level %d not implemented\n", dwLevel);
|
||||||
SetLastError(ERROR_INVALID_LEVEL);
|
SetLastError(ERROR_INVALID_LEVEL);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -2051,6 +2055,10 @@ BOOL WINAPI ChangeServiceConfig2A( SC_HANDLE hService, DWORD dwInfoLevel,
|
||||||
HeapFree( GetProcessHeap(), 0, faw.lpRebootMsg );
|
HeapFree( GetProcessHeap(), 0, faw.lpRebootMsg );
|
||||||
HeapFree( GetProcessHeap(), 0, faw.lpCommand );
|
HeapFree( GetProcessHeap(), 0, faw.lpCommand );
|
||||||
}
|
}
|
||||||
|
else if (dwInfoLevel == SERVICE_CONFIG_PRESHUTDOWN_INFO)
|
||||||
|
{
|
||||||
|
r = ChangeServiceConfig2W( hService, dwInfoLevel, lpInfo);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
SetLastError( ERROR_INVALID_PARAMETER );
|
SetLastError( ERROR_INVALID_PARAMETER );
|
||||||
|
|
||||||
|
|
|
@ -1896,6 +1896,7 @@ static void test_queryconfig2(void)
|
||||||
DWORD expected, needed;
|
DWORD expected, needed;
|
||||||
BYTE buffer[MAX_PATH];
|
BYTE buffer[MAX_PATH];
|
||||||
LPSERVICE_DESCRIPTIONA pConfig = (LPSERVICE_DESCRIPTIONA)buffer;
|
LPSERVICE_DESCRIPTIONA pConfig = (LPSERVICE_DESCRIPTIONA)buffer;
|
||||||
|
SERVICE_PRESHUTDOWN_INFO preshutdown_info;
|
||||||
static const CHAR servicename [] = "Winetest";
|
static const CHAR servicename [] = "Winetest";
|
||||||
static const CHAR displayname [] = "Winetest dummy service";
|
static const CHAR displayname [] = "Winetest dummy service";
|
||||||
static const CHAR pathname [] = "we_dont_care.exe";
|
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);
|
ret = pQueryServiceConfig2W(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer, needed,&needed);
|
||||||
ok(ret, "expected QueryServiceConfig2W to succeed\n");
|
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:
|
cleanup:
|
||||||
DeleteService(svc_handle);
|
DeleteService(svc_handle);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue