过去3个小时左右,我一直试图通过写入键盘设备来发送键盘输入。我已经成功找到并打开了键盘设备,但是我已经陷入了最后一步。我不知道如何格式化DeviceIoControl参数,我真的不知道从哪里开始获取值。
目前我的部分内容来自于一个名为Interception的图书馆,这里发布了另一个答案。为了节省空间,我省略了所有设备开放的东西。
#define IOCTL_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x820, METHOD_BUFFERED, FILE_ANY_ACCESS)
if(device != INVALID_HANDLE_VALUE) {
DWORD dwReturned;
KEYBOARD_INPUT_DATA kbinput;
kbinput.UnitId = 0;
kbinput.MakeCode = 0x2D;
kbinput.Flags = KEY_MAKE;
kbinput.Reserved = 0;
kbinput.ExtraInformation = 0;
DeviceIoControl(device, IOCTL_WRITE, &kbinput, sizeof(KEYBOARD_INPUT_DATA), NULL, 0, &dwReturned, NULL);
kbinput.Flags = KEY_BREAK;
DeviceIoControl(device, IOCTL_WRITE, &kbinput, sizeof(KEYBOARD_INPUT_DATA), NULL, 0, &dwReturned, NULL);
}
如果在DeviceIoControl调用后调用GetLastError,则返回值为ERROR_INVALID_FUNCTION(1)。我认为这意味着IOCTL_WRITE不是正确的值,但我对如何找到正确的值没有最微妙的想法,并且没有任何搜索量让我更进一步。