2012-06-21 4 views
1

Я использую CreateFile, чтобы открыть соединение с моим USB-оборудованием. Если у меня есть два (или более) жестких диска, подключенных к ПК, я хотел бы запретить нескольким экземплярам (другим PID) моего ПК-приложения подключаться к одному и тому же оборудованию.CreateFile не препятствует открытию моего устройства другими процессами

Я думал, что это удалось, запустив CreateFile с помощью dwShareMode = 0. По какой-то причине это не работает. Несколько разных экземпляров ПК-приложения получат действительный дескриптор при запуске CreateFile к тому же USB-устройству.

hDev = CreateFile(
    "\\\\?\\usb#vid_0442&pid_0891&mi_01#6&2ea0fbc8&0&0001#{ff646f80-8def-11d2-9449-00105a075f6b}" 
    GENERIC_READ | GENERIC_WRITE, 
    0, 
    NULL, 
    OPEN_EXISTING, 
    FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 
    NULL 
); 

Если возможно, я хотел бы сделать эту работу, как я хочу, не меняя драйвер так, что будет ссылаться на водителя подписания сертификата, yadayada ...

Что я пропустил?

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

ответ

1

WdfDeviceInitSetExclusive (...) в EvtDeviceAdd сделал работу повторно подписать мой водитель 8-]