최초 등록

This commit is contained in:
jhlee
2020-03-09 11:51:53 +09:00
commit d15e20f6ad
186 changed files with 3551 additions and 0 deletions

171
DriverApi/driverapi.cpp Normal file
View File

@@ -0,0 +1,171 @@
#include "stdafx.h"
#include <Windows.h>
#include <winioctl.h>
#include ".\..\common\common.h"
#include ".\..\common\driverapi.h"
#include <stdio.h> /* printf, scanf, NULL */
#include <stdlib.h>
#include <setupapi.h>
#pragma comment(lib,"setupapi.lib")
// 현재 제공되는 GUID를 지원하는 DeviceStack의 개수를 알려줍니다
int GetDeviceStackNameCount(struct _GUID * pGuid)
{
SP_INTERFACE_DEVICE_DATA interfaceData;
int index = 0;
HDEVINFO Info = SetupDiGetClassDevs(pGuid, 0, 0, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if (Info == (HDEVINFO)-1)
return 0; // 시스템은 이런 명령을 지원하지 못한다
interfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);
while (1)
{
BOOL bl;
bl = SetupDiEnumDeviceInterfaces(Info, 0, pGuid, index, &interfaceData);
if (bl == FALSE)
break;
index++;
}
SetupDiDestroyDeviceInfoList(Info);
return index;
}
// 현재 제공되는 GUID를 지원하는 DeviceStack의 이름들을 알려줍니다
BOOL GetDeviceStackName(struct _GUID * pGuid, TCHAR ** ppDeviceName, int index)
// index : 같은 Interface GUID를 가진 장치가 여러개인경우, 가장 먼저 검색되는 장치를 선택하려면 이곳에 0을 기록합니다
{
DWORD size;
BOOL bl;
SP_INTERFACE_DEVICE_DATA interfaceData;
PSP_INTERFACE_DEVICE_DETAIL_DATA pData;
HDEVINFO Info = SetupDiGetClassDevs(pGuid, 0, 0, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
TCHAR *pDeviceName;
*ppDeviceName = (TCHAR *)0;
if (Info == (HANDLE)-1)
return FALSE;
interfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);
bl = SetupDiEnumDeviceInterfaces(Info, 0, pGuid, index, &interfaceData);
if (bl == FALSE)
return bl;
SetupDiGetDeviceInterfaceDetail(Info, &interfaceData, 0, 0, &size, 0);
pData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(size);
pData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
SetupDiGetDeviceInterfaceDetail(Info, &interfaceData, pData, size, 0, 0);
pDeviceName = (TCHAR *)malloc((wcslen(pData->DevicePath) + 1) * sizeof(TCHAR));
memset(pDeviceName, 0, wcslen(pData->DevicePath) * sizeof(TCHAR));
wcscpy(pDeviceName, pData->DevicePath);
free(pData);
SetupDiDestroyDeviceInfoList(Info);
*ppDeviceName = pDeviceName;
return TRUE;
}
///////////////////////////////////////////////////////////////
HANDLE _HK_ClientDriverApiFindDriverName()
{
BOOL bl;
int count = 0;
int index = 0;
WCHAR DeviceName[MAX_PATH];
WCHAR *pDeviceName = NULL;
HANDLE hDevice = (HANDLE)-1;
count = GetDeviceStackNameCount((struct _GUID *)&GUID_VUSBBUS);
if (count == 0)
goto exit;
bl = GetDeviceStackName((struct _GUID *)&GUID_VUSBBUS, &pDeviceName, 0);
if (bl == TRUE)
{
wcscpy(DeviceName, pDeviceName);
free(pDeviceName);
hDevice = CreateFile(DeviceName, FILE_READ_DATA | FILE_WRITE_DATA,
0, NULL, OPEN_EXISTING, 0, NULL);
}
exit:
return hDevice;
}
BOOLEAN _HK_ClientDriverApiSetLEDEvent(HANDLE hDriverHandle, HANDLE hEvent)
{
BOOLEAN bRet = FALSE;
DWORD ret;
if (hDriverHandle == (HANDLE)-1)
goto exit;
bRet = DeviceIoControl(hDriverHandle, IOCTL_BUSDRIVER_SENDKEYBOARD_LED_EVENT, &hEvent, sizeof(HANDLE), NULL, 0, &ret, NULL);
exit:
return bRet;
}
BOOLEAN _HK_ClientDriverApiQueryIndicators(HANDLE hDriverHandle, HIDLED * pIndicators)
{
BOOLEAN bRet = FALSE;
DWORD ret;
if (hDriverHandle == (HANDLE)-1)
goto exit;
bRet = DeviceIoControl(hDriverHandle, _IOCTL_KEYBOARD_QUERY_INDICATORS, NULL, 0,
pIndicators, sizeof(KEYBOARD_HOOK_INDICATOR_PARAMETERS), &ret, NULL);
exit:
return bRet;
}
BOOLEAN _HK_ClientDriverApiSimulateKey(HANDLE hDriverHandle, HIDKEYCODE * pKeyCode)
{
BOOLEAN bRet = FALSE;
DWORD ret;
if (hDriverHandle == (HANDLE)-1)
goto exit;
bRet = DeviceIoControl(hDriverHandle, IOCTL_BUSDRIVER_SENDKEYBOARD, pKeyCode, sizeof(HIDKEYCODE), NULL, 0, &ret, NULL);
exit:
return bRet;
}
BOOLEAN _HK_ClientDriverApiSimulateMouse(HANDLE hDriverHandle, HIDMOUSECODE * pMouseCode)
{
BOOLEAN bRet = FALSE;
DWORD ret;
if (hDriverHandle == (HANDLE)-1)
goto exit;
bRet = DeviceIoControl(hDriverHandle, IOCTL_BUSDRIVER_SENDMOUSE, pMouseCode, sizeof(HIDMOUSECODE), NULL, 0, &ret, NULL);
exit:
return bRet;
}
void _HK_ClientDriverApiInitialize()
{
}
void _HK_ClientDriverApiCloseHandle(HANDLE hDriverHandle)
{
CloseHandle(hDriverHandle);
}