Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал... Не
помогло. Как в сервисе (без окна) получить нотификацию при появлении диска
(usb флешка) а-ля DBT_DEVICEARRIVAL (DBT_DEVTYP_VOLUME)?
Eugene.
Понедельник Июнь 20 2005, Eugene Lomovsky пишет к All:
EL> Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал... Hе
EL> помогло. Как в сервисе (без окна) получить нотификацию при появлении диска
EL> (usb флешка) а-ля DBT_DEVICEARRIVAL (DBT_DEVTYP_VOLUME)?
SERVICE_CONTROL_DEVICEEVENT ?
Пока!
Andrey
EL>> Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал...
EL>> Hе помогло. Как в сервисе (без окна) получить нотификацию при
EL>> появлении диска (usb флешка) а-ля DBT_DEVICEARRIVAL
EL>> (DBT_DEVTYP_VOLUME)?
AK> SERVICE_CONTROL_DEVICEEVENT ?
Понятно, что оно туда должно(?) приходить. Вопрос как подписаться и на что?
Ходят слухи, что сервисам это не дано.. Только top-level windows...
Eugene.
Втоpник Июнь 21 2005, Eugene Lomovsky пишет к Andrey Kochin:
EL>>> Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал...
EL>>> Hе помогло. Как в сервисе (без окна) получить нотификацию при
EL>>> появлении диска (usb флешка) а-ля DBT_DEVICEARRIVAL
EL>>> (DBT_DEVTYP_VOLUME)?
AK>> SERVICE_CONTROL_DEVICEEVENT ?
EL> Понятно, что оно туда должно(?) приходить. Вопрос как подписаться и на
EL> что? Ходят слухи, что сервисам это не дано.. Только top-level windows...
Да. Проблема есть. Hа отсутствие UnregisterDeviceNotification - жалуется, а
уведомлений - нет. Делаю так:
with dbd do
begin
dbco_size := sizeof(dbd);
dbco_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
dbcc_classguid := GUID_DEVCLASS_DISKDRIVE;
end;
Занятно, что RegisterDeviceNotification к размеру структуры в случае службы
относится более строго (она должна быть выровнена кратно 4), в случае
пользовательского процесса - такого нет.
Пока!
Andrey
Сpеда Июнь 22 2005, Andrey Kochin пишет к Eugene Lomovsky:
EL>>>> Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал...
EL>>>> Hе помогло. Как в сервисе (без окна) получить нотификацию при
EL>>>> появлении диска (usb флешка) а-ля DBT_DEVICEARRIVAL
EL>>>> (DBT_DEVTYP_VOLUME)?
AK>>> SERVICE_CONTROL_DEVICEEVENT ?
EL>> Понятно, что оно туда должно(?) приходить. Вопрос как подписаться и на
EL>> что? Ходят слухи, что сервисам это не дано.. Только top-level windows...
AK> Да. Проблема есть. Hа отсутствие UnregisterDeviceNotification - жалуется,
У Walter Oney к книге "Programming the Microsoft Windows Driver Model" есть
пример "AutoLaunch". Там RegisterDeviceNotification вызывается из сервиса и,
якобы, работает. Сам Вальтер рекомендовал на одном из форумов.
AK> Занятно, что RegisterDeviceNotification к размеру структуры в случае
AK> службы относится более строго (она должна быть выровнена кратно 4), в
AK> случае пользовательского процесса - такого нет.
А тут меня слегка переглючило. :)
Пока!
Andrey
EL>>>>> Читал WM_DEVICECHANGE, RegisterDeviceNotification,
EL>>>>> медитировал...
EL>>>>> Hе помогло. Как в сервисе (без окна) получить нотификацию при
EL>>>>> появлении диска (usb флешка) а-ля DBT_DEVICEARRIVAL
EL>>>>> (DBT_DEVTYP_VOLUME)?
AK>>>> SERVICE_CONTROL_DEVICEEVENT ?
EL>>> Понятно, что оно туда должно(?) приходить. Вопрос как подписаться
EL>>> и на что? Ходят слухи, что сервисам это не дано.. Только top-level
EL>>> windows...
AK> У Walter Oney к книге "Programming the Microsoft Windows Driver
AK> Model" есть пример "AutoLaunch". Там RegisterDeviceNotification
AK> вызывается из сервиса и, якобы, работает. Сам Вальтер рекомендовал
AK> на одном из форумов.
Ну, дык, я ж не просто так сюда постил... Само-собой, эту книжку смотрел.
Проблема в том, что сервисы могут подписаться на ограниченное количество
GUID'ов (перепробовал всякие, что есть в DDK, SDK)... С собственными
GUID'ами проблем никаких - прекрасно присылают оповещения...
Eugene.
Сpеда Июнь 29 2005, Eugene Lomovsky пишет к Andrey Kochin:
EL>>>>>> Читал WM_DEVICECHANGE, RegisterDeviceNotification,
EL>>>>>> медитировал...
EL>>>>>> Hе помогло. Как в сервисе (без окна) получить нотификацию при
EL>>>>>> появлении диска (usb флешка) а-ля DBT_DEVICEARRIVAL
EL>>>>>> (DBT_DEVTYP_VOLUME)?
AK>>>>> SERVICE_CONTROL_DEVICEEVENT ?
EL>>>> Понятно, что оно туда должно(?) приходить. Вопрос как подписаться
EL>>>> и на что? Ходят слухи, что сервисам это не дано.. Только top-level
EL>>>> windows...
AK>> У Walter Oney к книге "Programming the Microsoft Windows Driver
AK>> Model" есть пример "AutoLaunch". Там RegisterDeviceNotification
AK>> вызывается из сервиса и, якобы, работает. Сам Вальтер рекомендовал
AK>> на одном из форумов.
EL> Hу, дык, я ж не просто так сюда постил... Само-собой, эту книжку смотрел.
По твоим постингам крайне трудно восстановить все, что ты подразумеваешь. ;)
EL> Проблема в том, что сервисы могут подписаться на ограниченное
EL> количество GUID'ов (перепробовал всякие, что есть в DDK, SDK)... С
EL> собственными GUID'ами проблем никаких - прекрасно присылают
EL> оповещения...
Hепонятно, на сколько GUID'ов нужно подписаться, чтобы "получить нотификацию
при появлении диска"? И кто такие - "собственные GUID-ы"?
А DBT_DEVTYP_DEVICEINTERFACE и GUID_DEVCLASS_DISKDRIVE удается получить?
Пока!
Andrey
EL>>>>>>> Читал WM_DEVICECHANGE, RegisterDeviceNotification,
EL>>>>>>> медитировал...
EL>>>>>>> Hе помогло. Как в сервисе (без окна) получить нотификацию при
EL>>>>>>> появлении диска (usb флешка) а-ля DBT_DEVICEARRIVAL
EL>>>>>>> (DBT_DEVTYP_VOLUME)?
AK>>>>>> SERVICE_CONTROL_DEVICEEVENT ?
EL>>>>> Понятно, что оно туда должно(?) приходить. Вопрос как
EL>>>>> подписаться и на что? Ходят слухи, что сервисам это не дано..
EL>>>>> Только top-level windows...
AK>>> У Walter Oney к книге "Programming the Microsoft Windows Driver
AK>>> Model" есть пример "AutoLaunch". Там RegisterDeviceNotification
AK>>> вызывается из сервиса и, якобы, работает. Сам Вальтер рекомендовал
AK>>> на одном из форумов.
EL>> Hу, дык, я ж не просто так сюда постил... Само-собой, эту книжку
EL>> смотрел.
AK> По твоим постингам крайне трудно восстановить все, что ты
AK> подразумеваешь. ;)
EL>> Проблема в том, что сервисы могут подписаться на ограниченное
EL>> количество GUID'ов (перепробовал всякие, что есть в DDK, SDK)... С
EL>> собственными GUID'ами проблем никаких - прекрасно присылают
EL>> оповещения...
AK> Hепонятно, на сколько GUID'ов нужно подписаться, чтобы "получить
AK> нотификацию при появлении диска"? И кто такие - "собственные
AK> GUID-ы"?
Собственные, это те, что я сам сгенерил и зарегистрировал в своем драйвере
через IoRegisterDeviceInterface....
AK> А DBT_DEVTYP_DEVICEINTERFACE и GUID_DEVCLASS_DISKDRIVE удается
AK> получить?
Нет.
Eugene.