Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Как засечь появление volume в сервисе?

10 views
Skip to first unread message

Eugene Lomovsky

unread,
Jun 20, 2005, 10:54:02 AM6/20/05
to
Hello, All!

Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал... Не
помогло. Как в сервисе (без окна) получить нотификацию при появлении диска
(usb флешка) а-ля DBT_DEVICEARRIVAL (DBT_DEVTYP_VOLUME)?

Eugene.


Andrey Kochin

unread,
Jun 20, 2005, 12:17:22 PM6/20/05
to
Пpивет, Eugene !

Понедельник Июнь 20 2005, Eugene Lomovsky пишет к All:

EL> Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал... Hе
EL> помогло. Как в сервисе (без окна) получить нотификацию при появлении диска
EL> (usb флешка) а-ля DBT_DEVICEARRIVAL (DBT_DEVTYP_VOLUME)?

SERVICE_CONTROL_DEVICEEVENT ?


Пока!
Andrey

Eugene Lomovsky

unread,
Jun 21, 2005, 5:11:40 AM6/21/05
to
Greetings mortal, Andrey!

You wrote to Eugene Lomovsky on Mon, 20 Jun 2005 20:17:22 +0400:

EL>> Читал WM_DEVICECHANGE, RegisterDeviceNotification, медитировал...

EL>> Hе помогло. Как в сервисе (без окна) получить нотификацию при
EL>> появлении диска (usb флешка) а-ля DBT_DEVICEARRIVAL
EL>> (DBT_DEVTYP_VOLUME)?

AK> SERVICE_CONTROL_DEVICEEVENT ?

Понятно, что оно туда должно(?) приходить. Вопрос как подписаться и на что?
Ходят слухи, что сервисам это не дано.. Только top-level windows...

Eugene.


Andrey Kochin

unread,
Jun 22, 2005, 12:15:29 PM6/22/05
to
Пpивет, 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

Andrey Kochin

unread,
Jun 24, 2005, 1:11:25 PM6/24/05
to
Пpивет, Eugene !

С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

Eugene Lomovsky

unread,
Jun 29, 2005, 8:22:06 AM6/29/05
to
Greetings mortal, Andrey!

You wrote to Eugene Lomovsky on Fri, 24 Jun 2005 21:11:25 +0400:

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.


Andrey Kochin

unread,
Jun 29, 2005, 1:09:29 PM6/29/05
to
Пpивет, 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

Eugene Lomovsky

unread,
Jul 7, 2005, 5:32:35 AM7/7/05
to
Greetings mortal, Andrey!

You wrote to Eugene Lomovsky on Wed, 29 Jun 2005 21:09:29 +0400:

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.


0 new messages