Моё приложение не видит 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);
}

Может кто зорким глазом увидел опечатку? Ибо код верный, я проверял.


Ответы (0 шт):