mirror of
https://github.com/reactos/reactos.git
synced 2024-08-08 12:18:13 +00:00
[UMPNPMGR]
- Implement PNP_GetHwProfInfo. - Fix PNP_GetClassRegProp: Set the transfer length only in case of success. svn path=/trunk/; revision=54272
This commit is contained in:
parent
f6d2cc099e
commit
f39c8938c3
|
@ -1333,7 +1333,8 @@ DWORD PNP_GetClassRegProp(
|
|||
}
|
||||
|
||||
done:;
|
||||
*pulTransferLen = (ret == CR_SUCCESS) ? *pulLength : 0;
|
||||
if (ret == CR_SUCCESS)
|
||||
*pulTransferLen = *pulLength;
|
||||
|
||||
if (hPropKey != NULL)
|
||||
RegCloseKey(hPropKey);
|
||||
|
@ -2145,8 +2146,128 @@ DWORD PNP_GetHwProfInfo(
|
|||
DWORD ulProfileInfoSize,
|
||||
DWORD ulFlags)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return CR_CALL_NOT_IMPLEMENTED;
|
||||
WCHAR szProfileName[5];
|
||||
HKEY hKeyConfig = NULL;
|
||||
HKEY hKeyProfiles = NULL;
|
||||
HKEY hKeyProfile = NULL;
|
||||
DWORD dwDisposition;
|
||||
DWORD dwSize;
|
||||
LONG lError;
|
||||
CONFIGRET ret = CR_SUCCESS;
|
||||
|
||||
UNREFERENCED_PARAMETER(hBinding);
|
||||
|
||||
DPRINT("PNP_GetHwProfInfo() called\n");
|
||||
|
||||
if (ulProfileInfoSize == 0)
|
||||
{
|
||||
ret = CR_INVALID_DATA;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ulFlags != 0)
|
||||
{
|
||||
ret = CR_INVALID_FLAG;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Initialize the profile information */
|
||||
pHWProfileInfo->HWPI_ulHWProfile = 0;
|
||||
pHWProfileInfo->HWPI_szFriendlyName[0] = 0;
|
||||
pHWProfileInfo->HWPI_dwFlags = 0;
|
||||
|
||||
/* Open the 'IDConfigDB' key */
|
||||
lError = RegCreateKeyExW(HKEY_LOCAL_MACHINE,
|
||||
L"System\\CurrentControlSet\\Control\\IDConfigDB",
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_QUERY_VALUE,
|
||||
NULL,
|
||||
&hKeyConfig,
|
||||
&dwDisposition);
|
||||
if (lError != ERROR_SUCCESS)
|
||||
{
|
||||
ret = CR_REGISTRY_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Open the 'Hardware Profiles' subkey */
|
||||
lError = RegCreateKeyExW(hKeyConfig,
|
||||
L"Hardware Profiles",
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE,
|
||||
NULL,
|
||||
&hKeyProfiles,
|
||||
&dwDisposition);
|
||||
if (lError != ERROR_SUCCESS)
|
||||
{
|
||||
ret = CR_REGISTRY_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ulIndex == (ULONG)-1)
|
||||
{
|
||||
dwSize = sizeof(ULONG);
|
||||
lError = RegQueryValueExW(hKeyConfig,
|
||||
L"CurrentConfig",
|
||||
NULL,
|
||||
NULL,
|
||||
(LPBYTE)&pHWProfileInfo->HWPI_ulHWProfile,
|
||||
&dwSize);
|
||||
if (lError != ERROR_SUCCESS)
|
||||
{
|
||||
pHWProfileInfo->HWPI_ulHWProfile = 0;
|
||||
ret = CR_REGISTRY_ERROR;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* FIXME: not implemented yet */
|
||||
ret = CR_CALL_NOT_IMPLEMENTED;
|
||||
goto done;
|
||||
}
|
||||
|
||||
swprintf(szProfileName, L"%04lu", pHWProfileInfo->HWPI_ulHWProfile);
|
||||
|
||||
lError = RegOpenKeyExW(hKeyProfiles,
|
||||
szProfileName,
|
||||
0,
|
||||
KEY_QUERY_VALUE,
|
||||
&hKeyProfile);
|
||||
if (lError != ERROR_SUCCESS)
|
||||
{
|
||||
ret = CR_REGISTRY_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
dwSize = sizeof(pHWProfileInfo->HWPI_szFriendlyName);
|
||||
lError = RegQueryValueExW(hKeyProfile,
|
||||
L"FriendlyName",
|
||||
NULL,
|
||||
NULL,
|
||||
(LPBYTE)&pHWProfileInfo->HWPI_szFriendlyName,
|
||||
&dwSize);
|
||||
if (lError != ERROR_SUCCESS)
|
||||
{
|
||||
ret = CR_REGISTRY_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
done:
|
||||
if (hKeyProfile != NULL)
|
||||
RegCloseKey(hKeyProfile);
|
||||
|
||||
if (hKeyProfiles != NULL)
|
||||
RegCloseKey(hKeyProfiles);
|
||||
|
||||
if (hKeyConfig != NULL)
|
||||
RegCloseKey(hKeyConfig);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2515,6 +2636,8 @@ DWORD PNP_GetVersionInternal(
|
|||
handle_t hBinding,
|
||||
WORD *pwVersion)
|
||||
{
|
||||
*pwVersion = 0x501;
|
||||
return CR_SUCCESS;
|
||||
UNIMPLEMENTED;
|
||||
return CR_CALL_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
@ -3144,6 +3267,8 @@ ServiceControlHandler(DWORD dwControl,
|
|||
|
||||
case SERVICE_CONTROL_SHUTDOWN:
|
||||
DPRINT1(" SERVICE_CONTROL_SHUTDOWN received\n");
|
||||
/* Stop listening to RPC Messages */
|
||||
RpcMgmtStopServerListening(NULL);
|
||||
UpdateServiceStatus(SERVICE_STOPPED);
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
|
|
Loading…
Reference in a new issue