Моё приложение не видит Symlink
Пишу драйвер режима ядра для Windows. В ходе работы передаю данные приложению, но оно не видит созданный мной Link. С помощью GetLastError я убедился, что "Системе не удается найти указанный файл". Мой код драйвера
#define DEVICE_SEND CTL_CODE(FILE_DEVICE_UNKNOWN,0x801,METHOD_BUFFERED,FILE_WRITE_DATA)
#define DEVICE_REC CTL_CODE(FILE_DEVICE_UNKNOWN,0x802,METHOD_BUFFERED,FILE_READ_DATA)
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\MyMouFilter");
UNICODE_STRING SymLinkName = RTL_CONSTANT_STRING(L"\\??\\MyMouLink");
NTSTATUS DispatchCtl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
PIO_STACK_LOCATION irpsp = IoGetCurrentIrpStackLocation(Irp);
NTSTATUS status;
ULONG returnLenght = 0;
PVOID buffer = Irp->AssociatedIrp.SystemBuffer;
switch (irpsp->Parameters.DeviceIoControl.IoControlCode)
{
case DEVICE_SEND:
KdPrint(("Send: %ws \r\n", buffer));
returnLenght = (wcsnlen(buffer, 511) + 1) * 2;
break;
case DEVICE_REC:
outputBuffer = (PMOU_OUTPUT_DATA)buffer;
outputBuffer->SLastX = Key.SLastX; //Передаю в приложение значения X и Y
outputBuffer->SLastY = Key.SLastY;
KdPrint(("Send Data: %x %s \r\n", outputBuffer->SLastX, outputBuffer->SLastY));
returnLenght = sizeof(PMOU_OUTPUT_DATA);
break;
default:
status = STATUS_INVALID_PARAMETER;
break;
}
Irp->IoStatus.Status = status;
Irp->IoStatus.Information = returnLenght;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
////////////////////////////DRIVE_RENTRY///////////////////////////////////////
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
...
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchCtl;
...
}
А вот мой код в MFC
#define DEVICE_SEND CTL_CODE(FILE_DEVICE_UNKNOWN,0x801,METHOD_BUFFERED,FILE_WRITE_DATA)
#define DEVICE_REC CTL_CODE(FILE_DEVICE_UNKNOWN,0x802,METHOD_BUFFERED,FILE_READ_DATA)
void CMFCApplication1Dlg::OnBnClickedButton1()
{
devicehandle = CreateFile(L"\\\\.\\MyMouLink", GENERIC_ALL, 0, 0, OPEN_EXISTING, 0, 0);
//devicehandle = CreateFile(L"\\\\.\\MyMouLink", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ |
FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (devicehandle == INVALID_HANDLE_VALUE) {
int Error = GetLastError(); //
std::string test1 = std::to_string(Error); //Проверяю ошибку
MessageBoxA(NULL, test1.c_str(), "testx", MB_OK); //
MessageBox(L"not valid value",0,0);
return;
}
MessageBox(L"valid value", 0, 0);
}
Может кто зорким глазом увидел опечатку? Ибо код верный, я проверял.