過去 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 が正しい値ではないことを意味していると思いますが、正しい値を見つける方法がまったくわからず、いくら検索してもそれ以上得られませんでした。