📄 misc.c
字号:
/* convert the string to an integer value and create a
formatted string */
ULONG ulLocation = (ULONG)wcstoul(szBuffer,
NULL,
10);
if (LoadAndFormatString(hDllInstance,
IDS_LOCATIONSTR,
&szFormatted,
ulLocation,
szBuffer) != 0)
{
wcsncpy(szBuffer,
szFormatted,
BufferSize - 1);
szBuffer[BufferSize - 1] = L'\0';
LocalFree((HLOCAL)szFormatted);
}
else
Ret = FALSE;
}
}
if (!Ret &&
LoadString(hDllInstance,
IDS_UNKNOWN,
szBuffer,
BufferSize))
{
Ret = TRUE;
}
return Ret;
}
BOOL
GetDeviceStatusString(IN DEVINST DevInst,
IN HMACHINE hMachine,
OUT LPWSTR szBuffer,
IN DWORD BufferSize)
{
CONFIGRET cr;
ULONG Status, ProblemNumber;
UINT MessageId = IDS_UNKNOWN;
BOOL Ret = FALSE;
szBuffer[0] = L'\0';
cr = CM_Get_DevNode_Status_Ex(&Status,
&ProblemNumber,
DevInst,
0,
hMachine);
if (cr == CR_SUCCESS)
{
if (Status & DN_HAS_PROBLEM)
{
UINT uRet;
uRet = DeviceProblemText(hMachine,
DevInst,
ProblemNumber,
szBuffer,
(BufferSize != 0 ? BufferSize : BufferSize - 1));
Ret = (uRet != 0 && uRet < BufferSize);
}
else
{
if (!(Status & (DN_DRIVER_LOADED | DN_STARTED)))
{
MessageId = IDS_NODRIVERLOADED;
}
else
{
MessageId = IDS_DEV_NO_PROBLEM;
}
goto GeneralMessage;
}
}
else
{
GeneralMessage:
if (LoadString(hDllInstance,
MessageId,
szBuffer,
(int)BufferSize))
{
Ret = TRUE;
}
}
return Ret;
}
BOOL
GetDriverProviderString(IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
OUT LPWSTR szBuffer,
IN DWORD BufferSize)
{
HKEY hKey;
DWORD dwSize, dwType;
BOOL Ret = FALSE;
szBuffer[0] = L'\0';
/* get driver provider, date and version */
hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
DeviceInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DRV,
KEY_QUERY_VALUE);
if (hKey != INVALID_HANDLE_VALUE)
{
/* query the driver provider */
dwSize = BufferSize;
if (RegQueryValueEx(hKey,
REGSTR_VAL_PROVIDER_NAME,
NULL,
&dwType,
(LPBYTE)szBuffer,
&dwSize) == ERROR_SUCCESS &&
dwType == REG_SZ &&
szBuffer[0] != L'\0')
{
Ret = TRUE;
}
else
{
szBuffer[0] = L'\0';
}
RegCloseKey(hKey);
}
if (szBuffer[0] == L'\0')
{
/* unable to query the information */
if (LoadString(hDllInstance,
IDS_UNKNOWN,
szBuffer,
BufferSize))
{
Ret = TRUE;
}
}
return Ret;
}
BOOL
GetDriverVersionString(IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
OUT LPWSTR szBuffer,
IN DWORD BufferSize)
{
HKEY hKey;
DWORD dwSize, dwType;
BOOL Ret = FALSE;
szBuffer[0] = L'\0';
/* get driver provider, date and version */
hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
DeviceInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DRV,
KEY_QUERY_VALUE);
if (hKey != INVALID_HANDLE_VALUE)
{
/* query the driver provider */
dwSize = BufferSize;
if (RegQueryValueEx(hKey,
L"DriverVersion",
NULL,
&dwType,
(LPBYTE)szBuffer,
&dwSize) == ERROR_SUCCESS &&
dwType == REG_SZ &&
szBuffer[0] != L'\0')
{
Ret = TRUE;
}
else
{
szBuffer[0] = L'\0';
}
RegCloseKey(hKey);
}
if (szBuffer[0] == L'\0')
{
/* unable to query the information */
if (LoadString(hDllInstance,
IDS_NOTAVAILABLE,
szBuffer,
BufferSize))
{
Ret = TRUE;
}
}
return Ret;
}
BOOL
GetDriverDateString(IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
OUT LPWSTR szBuffer,
IN DWORD BufferSize)
{
HKEY hKey;
FILETIME DriverDate;
SYSTEMTIME SystemTime, LocalTime;
DWORD dwSize, dwType;
BOOL Ret = FALSE;
szBuffer[0] = L'\0';
/* get driver provider, date and version */
hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
DeviceInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DRV,
KEY_QUERY_VALUE);
if (hKey != INVALID_HANDLE_VALUE)
{
/* query the driver provider */
dwSize = sizeof(FILETIME);
if (RegQueryValueEx(hKey,
L"DriverDateData",
NULL,
&dwType,
(LPBYTE)&DriverDate,
&dwSize) == ERROR_SUCCESS &&
dwType == REG_BINARY &&
dwSize == sizeof(FILETIME) &&
FileTimeToSystemTime(&DriverDate,
&SystemTime) &&
SystemTimeToTzSpecificLocalTime(NULL,
&SystemTime,
&LocalTime) &&
GetDateFormat(LOCALE_USER_DEFAULT,
DATE_SHORTDATE,
&LocalTime,
NULL,
szBuffer,
BufferSize) != 0)
{
Ret = TRUE;
}
RegCloseKey(hKey);
}
if (!Ret)
{
/* unable to query the information */
if (LoadString(hDllInstance,
IDS_NOTAVAILABLE,
szBuffer,
BufferSize))
{
Ret = TRUE;
}
}
return Ret;
}
BOOL
IsDeviceHidden(IN DEVINST DevInst,
IN HMACHINE hMachine,
OUT BOOL *IsHidden)
{
CONFIGRET cr;
ULONG Status, ProblemNumber;
BOOL Ret = FALSE;
cr = CM_Get_DevNode_Status_Ex(&Status,
&ProblemNumber,
DevInst,
0,
hMachine);
if (cr == CR_SUCCESS)
{
*IsHidden = ((Status & DN_NO_SHOW_IN_DM) != 0);
Ret = TRUE;
}
return Ret;
}
BOOL
CanDisableDevice(IN DEVINST DevInst,
IN HMACHINE hMachine,
OUT BOOL *CanDisable)
{
CONFIGRET cr;
ULONG Status, ProblemNumber;
BOOL Ret = FALSE;
cr = CM_Get_DevNode_Status_Ex(&Status,
&ProblemNumber,
DevInst,
0,
hMachine);
if (cr == CR_SUCCESS)
{
*CanDisable = ((Status & DN_DISABLEABLE) != 0);
Ret = TRUE;
}
return Ret;
}
BOOL
IsDeviceStarted(IN DEVINST DevInst,
IN HMACHINE hMachine,
OUT BOOL *IsStarted)
{
CONFIGRET cr;
ULONG Status, ProblemNumber;
BOOL Ret = FALSE;
cr = CM_Get_DevNode_Status_Ex(&Status,
&ProblemNumber,
DevInst,
0,
hMachine);
if (cr == CR_SUCCESS)
{
*IsStarted = ((Status & DN_STARTED) != 0);
Ret = TRUE;
}
return Ret;
}
BOOL
IsDriverInstalled(IN DEVINST DevInst,
IN HMACHINE hMachine,
OUT BOOL *Installed)
{
CONFIGRET cr;
ULONG Status, ProblemNumber;
BOOL Ret = FALSE;
cr = CM_Get_DevNode_Status_Ex(&Status,
&ProblemNumber,
DevInst,
0,
hMachine);
if (cr == CR_SUCCESS)
{
*Installed = ((Status & DN_HAS_PROBLEM) != 0 ||
(Status & (DN_DRIVER_LOADED | DN_STARTED)) != 0);
Ret = TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -