IoCreateSymbolicLink
От: Аноним  
Дата: 09.03.04 08:09
Оценка:
вызываю в DriverEntry()

IoCreateDevice(...)

сразу же после этого вызываю
IoCreateSymbolicLink(...)



status = IoCreateDevice(DriverObject,
        sizeof(DEVICE_EXTENSION),
        &device_name,
        DEVICE_ASD,
        0,
        FALSE,
        &device_object);
возвращается 0 (все отлично).

    if (!NT_SUCCESS(status))
    {
        return status;
    }

    RtlInitUnicodeString(&symbolic_link, "SymbolicLink");

    status = IoCreateSymbolicLink(&symbolic_link, &device_name);
эта функция, по непонятным мне причинам, возвращает STATUS_OBJECT_PATH_SYNTAX_BAD


следовательно создать ссылку не получается.
пробовал указывать имя ссылки как набор символов (dkjfhdjkhglfkjgf), все та же ошибка.

может подскажите как создать символическую ссылку или в чем моя ошибка?

спасибо.
Re: IoCreateSymbolicLink
От: Аноним  
Дата: 09.03.04 08:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>

А>    RtlInitUnicodeString(&symbolic_link, "SymbolicLink");


А>


А>пробовал указывать имя ссылки как набор символов (dkjfhdjkhglfkjgf), все та же ошибка.


А>может подскажите как создать символическую ссылку или в чем моя ошибка?


RtlInitUnicodeString(&symbolic_link, "\Device\SymbolicLink");
Re: IoCreateSymbolicLink
От: Valerio Россия linkedin.com/in/boronin
Дата: 09.03.04 08:45
Оценка:
А>
А>    RtlInitUnicodeString(&symbolic_link, L"\\Device\\SymbolicLink");
А>

обратите внимание что в драйверах лучше все делать с UNICODE строками (а лучше собирать весь проект в UNICODE)
... << RSDN@Home 1.1.3 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: IoCreateSymbolicLink
От: TarasCo  
Дата: 09.03.04 08:48
Оценка: +1
А>RtlInitUnicodeString(&symbolic_link, "\Device\SymbolicLink");

Или, что более актуально:
RtlInitUnicodeString(&symbolic_link, "\\DosDevices\\SymbolicLink");
Да пребудет с тобою сила
Re: CreateFile()
От: Аноним  
Дата: 09.03.04 09:45
Оценка:
Здравствуйте, Аноним, Вы писали:

я создал символическую ссылку с именем \\Device\\SymbolicLink
в DriverUnload я эту ссылку удаляю.

теперь пытаюсь зацепить эту ссылку из приложения через CreateFile() так
CreateFile(\\\\.\\Device\\SymbolicLink, ...);
и так
CreateFile(\\\\.\\SymbolicLink, ...);

результат один — ошибка под номером 2 (такой путь не найден)

подскажите в чем может быть дело?!

спасибо.
Re[2]: CreateFile()
От: Геннадий Майко США  
Дата: 09.03.04 10:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>я создал символическую ссылку с именем \\Device\\SymbolicLink

А>в DriverUnload я эту ссылку удаляю.

А>теперь пытаюсь зацепить эту ссылку из приложения через CreateFile() так

А>CreateFile(\\\\.\\Device\\SymbolicLink, ...);
А>и так
А>CreateFile(\\\\.\\SymbolicLink, ...);

А>результат один — ошибка под номером 2 (такой путь не найден)

--
Если Вы создаете device не в функции DriverEntry, не забудьте сбросить флаг DO_DEVICE_INITIALIZING в флагах созданного device'a.

C уважением,
Геннадий Майко.
Re[3]: CreateFile()
От: Аноним  
Дата: 09.03.04 10:16
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Если Вы создаете device не в функции DriverEntry, не забудьте сбросить флаг DO_DEVICE_INITIALIZING в флагах созданного device'a.

я из DriverEntry() вызваю процедуру, в которой вызываю IoCreateDevice(), а после IoCreateSymbolicLink(). значит ли это, что необходимо сбросить флаг?!
каким образом это сделать?
Re[4]: CreateFile()
От: Геннадий Майко США  
Дата: 09.03.04 11:45
Оценка:
Здравствуйте, Аноним, Вы писали:

ГМ>>Если Вы создаете device не в функции DriverEntry, не забудьте сбросить флаг DO_DEVICE_INITIALIZING в флагах созданного device'a.

А>я из DriverEntry() вызваю процедуру, в которой вызываю IoCreateDevice(), а после IoCreateSymbolicLink(). значит ли это, что необходимо сбросить флаг?!
--
Нет, скорее всего, сбрасывать флаг в этой ситуации не надо.

Надо искать другую причину проблемы.
Попробуйте прежде всего посмотреть, действительно ли создается объект и ссылка на него с помощью утилиты winobj.exe из SDK.

С уважением,
Геннадий Майко.
Re[2]: CreateFile()
От: Аноним  
Дата: 09.03.04 16:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>я создал символическую ссылку с именем \\Device\\SymbolicLink

А>в DriverUnload я эту ссылку удаляю.

А>теперь пытаюсь зацепить эту ссылку из приложения через CreateFile() так

А>CreateFile(\\\\.\\Device\\SymbolicLink, ...);
А>и так
А>CreateFile(\\\\.\\SymbolicLink, ...);

А>результат один — ошибка под номером 2 (такой путь не найден)


А>подскажите в чем может быть дело?!


А>спасибо.


Насколько я знаю,

CreateFile(\\\\.\\SymbolicLink, ...);

будет пытаться открыть "\\DosDevices\\SymbolicLink"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.