mirror of
https://github.com/reactos/reactos.git
synced 2024-07-03 03:04:22 +00:00
[SYSSETUP] Read driver settings from and write them to the registry
- Read the driver settings from the registry. - Write the driver settings to the registry. - Make the read-only edit control for the input buffer length look like a non-read-only one because it is controlled by the up-down control.
This commit is contained in:
parent
00e843b1ed
commit
1cb019bd21
|
@ -11,8 +11,22 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
|
typedef struct _MOUSE_INFO
|
||||||
|
{
|
||||||
|
HKEY hDeviceKey;
|
||||||
|
DWORD dwSampleRateIndex;
|
||||||
|
DWORD dwWheelDetection;
|
||||||
|
DWORD dwInputBufferLength;
|
||||||
|
DWORD dwInitPolled;
|
||||||
|
} MOUSE_INFO, *PMOUSE_INFO;
|
||||||
|
|
||||||
DWORD MouseSampleRates[] = {20, 40, 60, 80, 100, 200};
|
DWORD MouseSampleRates[] = {20, 40, 60, 80, 100, 200};
|
||||||
|
|
||||||
|
#define DEFAULT_SAMPLERATEINDEX 4
|
||||||
|
#define DEFAULT_WHEELDETECTION 2
|
||||||
|
#define DEFAULT_INPUTBUFFERSIZE 100
|
||||||
|
#define DEFAULT_MINBUFFERSIZE 100
|
||||||
|
#define DEFAULT_MAXBUFFERSIZE 300
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
|
@ -80,13 +94,42 @@ LegacyDriverPropPageProvider(
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
VOID
|
DWORD
|
||||||
|
MouseGetSampleRateIndex(
|
||||||
|
DWORD dwSampleRate)
|
||||||
|
{
|
||||||
|
DWORD i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAYSIZE(MouseSampleRates); i++)
|
||||||
|
{
|
||||||
|
if (MouseSampleRates[i] == dwSampleRate)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DEFAULT_SAMPLERATEINDEX;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
BOOL
|
||||||
MouseOnDialogInit(
|
MouseOnDialogInit(
|
||||||
HWND hwndDlg,
|
HWND hwndDlg,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
PMOUSE_INFO pMouseInfo;
|
||||||
WCHAR szBuffer[64];
|
WCHAR szBuffer[64];
|
||||||
UINT i;
|
UINT i;
|
||||||
|
DWORD dwType, dwSize;
|
||||||
|
DWORD dwSampleRate;
|
||||||
|
LONG lError;
|
||||||
|
|
||||||
|
/* Get the pointer to the mouse info struct */
|
||||||
|
pMouseInfo = (PMOUSE_INFO)((LPPROPSHEETPAGE)lParam)->lParam;
|
||||||
|
if (pMouseInfo == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Keep the pointer to the mouse info struct */
|
||||||
|
SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pMouseInfo);
|
||||||
|
|
||||||
/* Add the sample rates */
|
/* Add the sample rates */
|
||||||
for (i = 0; i < ARRAYSIZE(MouseSampleRates); i++)
|
for (i = 0; i < ARRAYSIZE(MouseSampleRates); i++)
|
||||||
|
@ -99,6 +142,31 @@ MouseOnDialogInit(
|
||||||
(LPARAM)szBuffer);
|
(LPARAM)szBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Read the SampleRate parameter */
|
||||||
|
dwSize = sizeof(DWORD);
|
||||||
|
lError = RegQueryValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"SampleRate",
|
||||||
|
NULL,
|
||||||
|
&dwType,
|
||||||
|
(LPBYTE)&dwSampleRate,
|
||||||
|
&dwSize);
|
||||||
|
if (lError == ERROR_SUCCESS && dwType == REG_DWORD && dwSize == sizeof(DWORD))
|
||||||
|
{
|
||||||
|
pMouseInfo->dwSampleRateIndex = MouseGetSampleRateIndex(dwSampleRate);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Set the default sample rate (100 samples per second) */
|
||||||
|
pMouseInfo->dwSampleRateIndex = DEFAULT_SAMPLERATEINDEX;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the sample rate */
|
||||||
|
SendDlgItemMessageW(hwndDlg,
|
||||||
|
IDC_PS2MOUSESAMPLERATE,
|
||||||
|
CB_SETCURSEL,
|
||||||
|
pMouseInfo->dwSampleRateIndex,
|
||||||
|
0);
|
||||||
|
|
||||||
/* Add the detection options */
|
/* Add the detection options */
|
||||||
for (i = IDS_DETECTIONDISABLED; i <= IDS_ASSUMEPRESENT; i++)
|
for (i = IDS_DETECTIONDISABLED; i <= IDS_ASSUMEPRESENT; i++)
|
||||||
{
|
{
|
||||||
|
@ -110,18 +178,77 @@ MouseOnDialogInit(
|
||||||
(LPARAM)szBuffer);
|
(LPARAM)szBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Read the EnableWheelDetection parameter */
|
||||||
|
dwSize = sizeof(DWORD);
|
||||||
|
lError = RegQueryValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"EnableWheelDetection",
|
||||||
|
NULL,
|
||||||
|
&dwType,
|
||||||
|
(LPBYTE)&pMouseInfo->dwWheelDetection,
|
||||||
|
&dwSize);
|
||||||
|
if (lError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD))
|
||||||
|
{
|
||||||
|
/* Set the default wheel detection parameter */
|
||||||
|
pMouseInfo->dwWheelDetection = DEFAULT_WHEELDETECTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the wheel detection parameter */
|
||||||
|
SendDlgItemMessageW(hwndDlg,
|
||||||
|
IDC_PS2MOUSEWHEEL,
|
||||||
|
CB_SETCURSEL,
|
||||||
|
pMouseInfo->dwWheelDetection,
|
||||||
|
0);
|
||||||
|
|
||||||
/* Set the input buffer length range: 100-300 */
|
/* Set the input buffer length range: 100-300 */
|
||||||
SendDlgItemMessageW(hwndDlg,
|
SendDlgItemMessageW(hwndDlg,
|
||||||
IDC_PS2MOUSEINPUTUPDN,
|
IDC_PS2MOUSEINPUTUPDN,
|
||||||
UDM_SETRANGE32,
|
UDM_SETRANGE32,
|
||||||
100,
|
DEFAULT_MINBUFFERSIZE,
|
||||||
300);
|
DEFAULT_MAXBUFFERSIZE);
|
||||||
|
|
||||||
|
/* Read the MouseDataQueueSize parameter */
|
||||||
|
dwSize = sizeof(DWORD);
|
||||||
|
lError = RegQueryValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"MouseDataQueueSize",
|
||||||
|
NULL,
|
||||||
|
&dwType,
|
||||||
|
(LPBYTE)&pMouseInfo->dwInputBufferLength,
|
||||||
|
&dwSize);
|
||||||
|
if (lError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD))
|
||||||
|
{
|
||||||
|
/* Set the default input buffer length (100 packets) */
|
||||||
|
pMouseInfo->dwInputBufferLength = DEFAULT_INPUTBUFFERSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the input buffer length */
|
||||||
SendDlgItemMessageW(hwndDlg,
|
SendDlgItemMessageW(hwndDlg,
|
||||||
IDC_PS2MOUSEINPUTUPDN,
|
IDC_PS2MOUSEINPUTUPDN,
|
||||||
UDM_SETPOS32,
|
UDM_SETPOS32,
|
||||||
0,
|
0,
|
||||||
100);
|
pMouseInfo->dwInputBufferLength);
|
||||||
|
|
||||||
|
/* Read the MouseInitializePolled parameter */
|
||||||
|
dwSize = sizeof(DWORD);
|
||||||
|
lError = RegQueryValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"MouseInitializePolled",
|
||||||
|
NULL,
|
||||||
|
&dwType,
|
||||||
|
(LPBYTE)&pMouseInfo->dwInitPolled,
|
||||||
|
&dwSize);
|
||||||
|
if (lError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD))
|
||||||
|
{
|
||||||
|
/* Set the default init polled value (FALSE) */
|
||||||
|
pMouseInfo->dwInitPolled = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the fast initialization option */
|
||||||
|
SendDlgItemMessage(hwndDlg,
|
||||||
|
IDC_PS2MOUSEFASTINIT,
|
||||||
|
BM_SETCHECK,
|
||||||
|
(pMouseInfo->dwInitPolled == 0) ? BST_CHECKED : 0,
|
||||||
|
0);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -153,14 +280,14 @@ MouseOnCommand(
|
||||||
SendDlgItemMessageW(hwndDlg,
|
SendDlgItemMessageW(hwndDlg,
|
||||||
IDC_PS2MOUSESAMPLERATE,
|
IDC_PS2MOUSESAMPLERATE,
|
||||||
CB_SETCURSEL,
|
CB_SETCURSEL,
|
||||||
4,
|
DEFAULT_SAMPLERATEINDEX,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
/* Wheel detection: Assume wheel present */
|
/* Wheel detection: Assume wheel present */
|
||||||
SendDlgItemMessageW(hwndDlg,
|
SendDlgItemMessageW(hwndDlg,
|
||||||
IDC_PS2MOUSEWHEEL,
|
IDC_PS2MOUSEWHEEL,
|
||||||
CB_SETCURSEL,
|
CB_SETCURSEL,
|
||||||
2,
|
DEFAULT_WHEELDETECTION,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
/* Input buffer length: 100 packets */
|
/* Input buffer length: 100 packets */
|
||||||
|
@ -168,7 +295,7 @@ MouseOnCommand(
|
||||||
IDC_PS2MOUSEINPUTUPDN,
|
IDC_PS2MOUSEINPUTUPDN,
|
||||||
UDM_SETPOS32,
|
UDM_SETPOS32,
|
||||||
0,
|
0,
|
||||||
100);
|
DEFAULT_INPUTBUFFERSIZE);
|
||||||
|
|
||||||
/* Fast Initialization: Checked */
|
/* Fast Initialization: Checked */
|
||||||
SendDlgItemMessage(hwndDlg,
|
SendDlgItemMessage(hwndDlg,
|
||||||
|
@ -188,6 +315,100 @@ MouseOnCommand(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
MouseOnApply(
|
||||||
|
HWND hwndDlg)
|
||||||
|
{
|
||||||
|
PMOUSE_INFO pMouseInfo;
|
||||||
|
DWORD dwSampleRateIndex = 0;
|
||||||
|
DWORD dwSampleRate, dwWheelDetection;
|
||||||
|
DWORD dwInputBufferLength;
|
||||||
|
DWORD dwInitPolled;
|
||||||
|
UINT uValue;
|
||||||
|
BOOL bFailed;
|
||||||
|
INT nIndex;
|
||||||
|
|
||||||
|
pMouseInfo = (PMOUSE_INFO)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
|
||||||
|
|
||||||
|
/* Get the sample rate setting and store it if it was changed */
|
||||||
|
nIndex = SendDlgItemMessageW(hwndDlg, IDC_PS2MOUSESAMPLERATE,
|
||||||
|
CB_GETCURSEL, 0, 0);
|
||||||
|
if (nIndex == CB_ERR)
|
||||||
|
dwSampleRateIndex = DEFAULT_SAMPLERATEINDEX;
|
||||||
|
else
|
||||||
|
dwSampleRateIndex = (DWORD)nIndex;
|
||||||
|
|
||||||
|
if (dwSampleRateIndex != pMouseInfo->dwSampleRateIndex)
|
||||||
|
{
|
||||||
|
dwSampleRate = MouseSampleRates[dwSampleRateIndex];
|
||||||
|
RegSetValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"SampleRate",
|
||||||
|
0,
|
||||||
|
REG_DWORD,
|
||||||
|
(LPBYTE)&dwSampleRate,
|
||||||
|
sizeof(dwSampleRate));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the wheel detection setting and store it if it was changed */
|
||||||
|
nIndex = SendDlgItemMessageW(hwndDlg, IDC_PS2MOUSEWHEEL,
|
||||||
|
CB_GETCURSEL, 0, 0);
|
||||||
|
if (nIndex == CB_ERR)
|
||||||
|
dwWheelDetection = DEFAULT_WHEELDETECTION;
|
||||||
|
else
|
||||||
|
dwWheelDetection = (DWORD)nIndex;
|
||||||
|
|
||||||
|
if (dwWheelDetection != pMouseInfo->dwWheelDetection)
|
||||||
|
{
|
||||||
|
RegSetValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"EnableWheelDetection",
|
||||||
|
0,
|
||||||
|
REG_DWORD,
|
||||||
|
(LPBYTE)&dwWheelDetection,
|
||||||
|
sizeof(dwWheelDetection));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the input buffer length setting and store it if it was changed */
|
||||||
|
uValue = SendDlgItemMessageW(hwndDlg,
|
||||||
|
IDC_PS2MOUSEINPUTUPDN,
|
||||||
|
UDM_GETPOS32,
|
||||||
|
0,
|
||||||
|
(LPARAM)&bFailed);
|
||||||
|
if (bFailed)
|
||||||
|
dwInputBufferLength = DEFAULT_INPUTBUFFERSIZE;
|
||||||
|
else
|
||||||
|
dwInputBufferLength = (DWORD)uValue;
|
||||||
|
|
||||||
|
if (dwInputBufferLength != pMouseInfo->dwInputBufferLength)
|
||||||
|
{
|
||||||
|
RegSetValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"MouseDataQueueSize",
|
||||||
|
0,
|
||||||
|
REG_DWORD,
|
||||||
|
(LPBYTE)&dwInputBufferLength,
|
||||||
|
sizeof(dwInputBufferLength));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the fast initialization setting and store it if it was changed */
|
||||||
|
uValue = SendDlgItemMessage(hwndDlg,
|
||||||
|
IDC_PS2MOUSEFASTINIT,
|
||||||
|
BM_GETCHECK,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
dwInitPolled = (uValue == BST_CHECKED) ? 0 : 1;
|
||||||
|
|
||||||
|
if (dwInitPolled != pMouseInfo->dwInitPolled)
|
||||||
|
{
|
||||||
|
RegSetValueExW(pMouseInfo->hDeviceKey,
|
||||||
|
L"MouseInitializePolled",
|
||||||
|
0,
|
||||||
|
REG_DWORD,
|
||||||
|
(LPBYTE)&dwInitPolled,
|
||||||
|
sizeof(dwInitPolled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
BOOL
|
BOOL
|
||||||
MouseOnNotify(
|
MouseOnNotify(
|
||||||
|
@ -195,21 +416,41 @@ MouseOnNotify(
|
||||||
WPARAM wParam,
|
WPARAM wParam,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
switch (((LPNMHDR)lParam)->idFrom)
|
switch (((LPNMHDR)lParam)->code)
|
||||||
{
|
{
|
||||||
case IDC_PS2MOUSEINPUTUPDN:
|
case UDN_DELTAPOS:
|
||||||
if (((LPNMHDR)lParam)->code == UDN_DELTAPOS)
|
if (((LPNMHDR)lParam)->idFrom == IDC_PS2MOUSEINPUTUPDN)
|
||||||
{
|
{
|
||||||
((LPNMUPDOWN)lParam)->iDelta *= 10;
|
((LPNMUPDOWN)lParam)->iDelta *= 10;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PSN_APPLY:
|
||||||
|
MouseOnApply(hwndDlg);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
INT_PTR
|
||||||
|
MouseOnCtrlColorStatic(
|
||||||
|
HWND hwndDlg,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
if ((HWND)lParam != GetDlgItem(hwndDlg, IDC_PS2MOUSEINPUTLEN))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT));
|
||||||
|
SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));
|
||||||
|
return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
INT_PTR
|
INT_PTR
|
||||||
CALLBACK
|
CALLBACK
|
||||||
|
@ -224,8 +465,7 @@ MouseDlgProc(
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
MouseOnDialogInit(hwndDlg, lParam);
|
return MouseOnDialogInit(hwndDlg, lParam);
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
MouseOnCommand(hwndDlg, wParam, lParam);
|
MouseOnCommand(hwndDlg, wParam, lParam);
|
||||||
|
@ -234,12 +474,30 @@ MouseDlgProc(
|
||||||
case WM_NOTIFY:
|
case WM_NOTIFY:
|
||||||
return MouseOnNotify(hwndDlg, wParam, lParam);
|
return MouseOnNotify(hwndDlg, wParam, lParam);
|
||||||
|
|
||||||
|
case WM_CTLCOLORSTATIC:
|
||||||
|
return MouseOnCtrlColorStatic(hwndDlg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
UINT
|
||||||
|
CALLBACK
|
||||||
|
MouseCallback(
|
||||||
|
HWND hWnd,
|
||||||
|
UINT uMsg,
|
||||||
|
LPPROPSHEETPAGE ppsp)
|
||||||
|
{
|
||||||
|
if (uMsg == PSPCB_RELEASE)
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, (PMOUSE_INFO)ppsp->lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
|
@ -253,6 +511,7 @@ PS2MousePropPageProvider(
|
||||||
{
|
{
|
||||||
PROPSHEETPAGEW PropSheetPage;
|
PROPSHEETPAGEW PropSheetPage;
|
||||||
HPROPSHEETPAGE hPropSheetPage;
|
HPROPSHEETPAGE hPropSheetPage;
|
||||||
|
PMOUSE_INFO pMouseInfo;
|
||||||
|
|
||||||
DPRINT("PS2MousePropPageProvider(%p %p %lx)\n",
|
DPRINT("PS2MousePropPageProvider(%p %p %lx)\n",
|
||||||
lpPropSheetPageRequest, lpfnAddPropSheetPageProc, lParam);
|
lpPropSheetPageRequest, lpfnAddPropSheetPageProc, lParam);
|
||||||
|
@ -260,18 +519,36 @@ PS2MousePropPageProvider(
|
||||||
if (lpPropSheetPageRequest->PageRequested != SPPSR_ENUM_ADV_DEVICE_PROPERTIES)
|
if (lpPropSheetPageRequest->PageRequested != SPPSR_ENUM_ADV_DEVICE_PROPERTIES)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
pMouseInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MOUSE_INFO));
|
||||||
|
if (pMouseInfo == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
pMouseInfo->hDeviceKey = SetupDiOpenDevRegKey(lpPropSheetPageRequest->DeviceInfoSet,
|
||||||
|
lpPropSheetPageRequest->DeviceInfoData,
|
||||||
|
DICS_FLAG_GLOBAL,
|
||||||
|
0,
|
||||||
|
DIREG_DEV,
|
||||||
|
KEY_ALL_ACCESS);
|
||||||
|
if (pMouseInfo->hDeviceKey == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
DPRINT1("SetupDiOpenDevRegKey() failed (Error %lu)\n", GetLastError());
|
||||||
|
HeapFree(GetProcessHeap(), 0, pMouseInfo);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
PropSheetPage.dwSize = sizeof(PROPSHEETPAGEW);
|
PropSheetPage.dwSize = sizeof(PROPSHEETPAGEW);
|
||||||
PropSheetPage.dwFlags = 0;
|
PropSheetPage.dwFlags = 0;
|
||||||
PropSheetPage.hInstance = hDllInstance;
|
PropSheetPage.hInstance = hDllInstance;
|
||||||
PropSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_PS2MOUSEPROPERTIES);
|
PropSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_PS2MOUSEPROPERTIES);
|
||||||
PropSheetPage.pfnDlgProc = MouseDlgProc;
|
PropSheetPage.pfnDlgProc = MouseDlgProc;
|
||||||
PropSheetPage.lParam = 0;
|
PropSheetPage.lParam = (LPARAM)pMouseInfo;
|
||||||
PropSheetPage.pfnCallback = NULL;
|
PropSheetPage.pfnCallback = MouseCallback;
|
||||||
|
|
||||||
hPropSheetPage = CreatePropertySheetPageW(&PropSheetPage);
|
hPropSheetPage = CreatePropertySheetPageW(&PropSheetPage);
|
||||||
if (hPropSheetPage == NULL)
|
if (hPropSheetPage == NULL)
|
||||||
{
|
{
|
||||||
DPRINT1("CreatePropertySheetPageW() failed!\n");
|
DPRINT1("CreatePropertySheetPageW() failed!\n");
|
||||||
|
HeapFree(GetProcessHeap(), 0, pMouseInfo);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,6 +556,7 @@ PS2MousePropPageProvider(
|
||||||
{
|
{
|
||||||
DPRINT1("lpfnAddPropSheetPageProc() failed!\n");
|
DPRINT1("lpfnAddPropSheetPageProc() failed!\n");
|
||||||
DestroyPropertySheetPage(hPropSheetPage);
|
DestroyPropertySheetPage(hPropSheetPage);
|
||||||
|
HeapFree(GetProcessHeap(), 0, pMouseInfo);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue