Re[3]: DefineDosDevice-удалить устройство из драйвера?
От: Аноним  
Дата: 28.08.06 18:14
Оценка:
Здравствуйте, argent, Вы писали:

A>Мне нужно такое же действие, какое в юзермоде производит DefineDosDevice. В том числе, рассылая сообщения, например explorer, чтобы он правильно отображал определенные устройства.


Так ведь DefineDosDevice() для удалении линка всё равно в итоге вызовит IoDeleteSymbolicLink().

А>>И совершенно не понимаю зачем создавать эту самую символьную ссылку из Ring3 ?


A>Сейчас я делаю это из юзермода, но если это приложение закроют, было бы не плохо, если бы драйвер умел это делать сам.


Это просто:


// с помощью этого вызова ядра установи свой callback на
// создание/уничтожение процесса
NTSTATUS
  PsSetCreateProcessNotifyRoutine(
    IN PCREATE_PROCESS_NOTIFY_ROUTINE  NotifyRoutine,
    IN BOOLEAN  Remove
    );

// когда твой callback в драйвере будет вызван с Create = FALSE,
// это значит процесс с хендлом ProcessId сейчас будет уничтожен.
// проверишь хендл, если твоего app - удаляешь ссылку в драйвере
VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE) (
    IN HANDLE  ParentId,
    IN HANDLE  ProcessId,
    IN BOOLEAN  Create
    );


А>>Это есть необходимое условие? Если нет, то создавай и удаляй ссылку в драйвере.


A>Да, именно в драйвере мне и нужно это сделать. проблема только с сообщением (WM_DEVICECHANGE,DBT_DEVICEARRIVAL), (ну или WM_DEVICECHANGE , DBT_DEVTYP_VOLUME), как из разослать броадкастом из драйвера?


Возможно, поможет вызов ядра

NTSTATUS 
  IoReportTargetDeviceChange(
    IN PDEVICE_OBJECT  PhysicalDeviceObject,
    IN PVOID  NotificationStructure
    );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.