UpdateDriverForPlugAndPlayDevices

Тема в разделе "WASM.NT.KERNEL", создана пользователем nbyte, 14 июн 2008.

  1. nbyte

    nbyte New Member

    Публикаций:
    0
    Регистрация:
    27 май 2007
    Сообщения:
    161
    Здравствуйте.
    Подскажите пожалуйста кто знает.
    Есть у меня следующий код

    Код (Text):
    1.   if not UpdateDriverForPlugAndPlayDevices(Handle, @HardwareId, PChar(InfFile), INSTALLFLAG_FORCE, @Reboot) then
    2.   begin
    3.     ShowMessage(SysErrorMessage(GetLastError));
    4.     Exit;
    5.   end;
    При выполнении получаю ошибку.
    Я чтото неправильно передаю, только немогу понять что или возможно HardwareId нетакой тока незнаю откуда его взять правильный.
    Можете посмотреть, может ктонибудь увидит в чём тут дело.
     
  2. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    Во я тему нашел )
    У меня с этой функцией хрень какая то твориться.

    Код (Text):
    1.     newdevMod = LoadLibrary(TEXT("newdev.dll"));
    2.     if ( !newdevMod ) {
    3.         DBGMSG("Error:LoadLibrary fails.");
    4.         goto Label_return;
    5.     }
    6.    
    7.     UpdateFn = (UpdateDriverForPlugAndPlayDevicesProto)GetProcAddress( newdevMod , "UpdateDriverForPlugAndPlayDevicesW" );
    8.     if ( !UpdateFn )
    9.     {
    10.         DBGMSG("Error:GetProcAddress fails.");
    11.         goto Label_return;
    12.     }
    13.     __debugbreak();
    14.     if( !UpdateFn( NULL , L"root\\rdpdr" , FullPathToMachineInf , INSTALLFLAG_FORCE , &reboot ) )//INSTALLFLAG_NONINTERACTIVE
    15.     {
    16.         DBGMSG("Note:UpdateFn fails. Can be not a error.");
    17.         goto Label_return;
    18.     }
    Функция UpdateDriverForPlugAndPlayDevices возвращает 0 и статус ошибки тоже 0. Что я уже только не пробовал делать, что бы заставить ее работать.
    Точно такой же код с такими же параметрами с сайта майкрософта(devcon.exe) работает нормально.
    Пробовал сравнить где исполнение идет не так, но так и не нашел разницы.
    Само устройство "root\\rdpdr" он находит, все начальные проверки в функции UpdateDriverForPlugAndPlayDevices - исполняются. Смотрел внутренности UpdateDriverForPlugAndPlayDevices до вызова newdev!InstallDeviceInstance все идет хорошо. Поискал в гугле, так и не нашел ответа, у всех UpdateDriverForPlugAndPlayDevices возвращает результат ошибки, у меня нет.
    ОСь: XP Home Edition SP3

    Если кто с таким сталкивался, подскажите куда копать пожалуйста.
     
  3. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    Этот же код не в контексте сервиса, работает нормально. Видно под сервисом, что то не так работает.(затык идет в newdev!DoDeviceWizard - она хоть и возвращает что все хорошо, но ставит ошибку: 0xc0000139) В контексте другого процесса, ошибку она не устанавливает.
    Также если вызывать из под сервиса, то вызывается pSetupGetGlobalFlags\pSetupSetGlobalFlags - из под обычного приложения нет. Не в курсе что функции делают, но друг кому то когда то пригодиться.
     
  4. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    DEVINST devRoot;

    if ( CM_Locate_DevNode_Ex(
    &devRoot,
    NULL,
    CM_LOCATE_DEVNODE_NORMAL,
    NULL
    ) != CR_SUCCESS) {

    return;
    }

    CM_Reenumerate_DevNode_Ex(
    devRoot,
    0,
    NULL
    );
     
  5. BOBO

    BOBO New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2009
    Сообщения:
    2
    Можно ли этим апи поставить неподписаный драйвер?

    Пытаюсь поставить драйвер для самопальной флешки\кардридера на WINXP SP 3, возвращает 0хE000022F, по гуглу говоритсья что это из-за неподписаности.

    Пробовал разные другие дрова, но все подписаные, ставятся без проблем.
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    BOBO
    Подпишите свой. Что сложного. Как подписывать - гуглим!
     
  7. BOBO

    BOBO New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2009
    Сообщения:
    2
    Есть обстоятельства что я не могу сам подписывать этот драйвер и заставить сделать это его разработчика. Мне нужно сделать удаленный установщик, я уже нашел такую штуку как "PrivateHash" и с помощю неё ставить можно локально, теперь нужно разобратся почему это не работает удаленно через psexec. На этом апи остановился потому что оно очень простое, если вы знаете другие апи то буду рад подсказке.

    Оказалось что виноват psexec нужно открыто вводить логин\пасс, а UpdateDriverForPlugAndPlayDevices в связке с PrivateHash отлично работает.