Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

157 lines
3.3 KiB

/*++
Copyright (c) 1991 - 2001 Microsoft Corporation
Module Name:
### ### ## ## ##### ## ## ##### ### ##### #### ##### #####
## # ### ## ## ## ## ## ## ## ### ## ## ## # ## ## ## ##
### ## ## #### ## #### ## ## ## ## ## ## ## ## ## ## ##
### ## ## ### ##### #### ## ## ## ## ## ## ## ## ## ## ##
### ####### #### ## ## ##### ####### ## ## ## ##### #####
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## # ## ##
### ## ## ## ## ##### ## ## ## ## ##### ## #### ## ##
Abstract:
This module contains the implementation for
the ISaKeypad interface class.
Author:
Wesley Witt (wesw) 1-Oct-2001
Environment:
Kernel mode only.
Notes:
--*/
#include "internal.h"
HANDLE
OpenSaDevice(
ULONG DeviceType
)
{
HANDLE hDevice;
WCHAR buf[128];
wcscpy( buf, L"\\\\?\\GLOBALROOT" );
switch (DeviceType) {
case SA_DEVICE_DISPLAY:
wcscat( buf, SA_DEVICE_DISPLAY_NAME_STRING );
break;
case SA_DEVICE_KEYPAD:
wcscat( buf, SA_DEVICE_KEYPAD_NAME_STRING );
break;
case SA_DEVICE_NVRAM:
wcscat( buf, SA_DEVICE_NVRAM_NAME_STRING );
break;
case SA_DEVICE_WATCHDOG:
wcscat( buf, SA_DEVICE_WATCHDOG_NAME_STRING );
break;
}
hDevice = CreateFile(
buf,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL
);
return hDevice;
}
CSaKeypad::CSaKeypad()
{
m_hFile = OpenSaDevice( SA_DEVICE_KEYPAD );
if (m_hFile != INVALID_HANDLE_VALUE) {
ULONG Bytes;
BOOL b = DeviceIoControl(
m_hFile,
IOCTL_SA_GET_VERSION,
NULL,
0,
&m_InterfaceVersion,
sizeof(ULONG),
&Bytes,
NULL
);
if (!b) {
CloseHandle( m_hFile );
m_hFile = NULL;
}
} else {
m_hFile = NULL;
}
}
CSaKeypad::~CSaKeypad()
{
if (m_hFile != NULL) {
CloseHandle( m_hFile );
}
}
STDMETHODIMP CSaKeypad::get_InterfaceVersion(long *pVal)
{
*pVal = (long)m_InterfaceVersion;
return S_OK;
}
STDMETHODIMP
CSaKeypad::get_Key(
SAKEY *pVal
)
{
ULONG Bytes;
if (m_hFile == NULL){
return HRESULT_FROM_WIN32(ERROR_INVALID_HANDLE);
}
if (!ReadFile( m_hFile, &m_Keypress, sizeof(UCHAR), &Bytes, NULL )) {
return E_FAIL;
}
if (m_Keypress & SA_KEYPAD_UP) {
*pVal = SAKEY_UP;
} else
if (m_Keypress & SA_KEYPAD_DOWN) {
*pVal = SAKEY_DOWN;
} else
if (m_Keypress & SA_KEYPAD_LEFT) {
*pVal = SAKEY_LEFT;
} else
if (m_Keypress & SA_KEYPAD_RIGHT) {
*pVal = SAKEY_RIGHT;
} else
if (m_Keypress & SA_KEYPAD_CANCEL) {
*pVal = SAKEY_ESCAPE;
} else
if (m_Keypress & SA_KEYPAD_SELECT) {
*pVal = SAKEY_RETURN;
} else {
*pVal = (SAKEY)0;
}
return S_OK;
}