UpdateDriverForPlugAndPlayDevices

Discussion in 'WASM.NT.KERNEL' started by nbyte, Jun 14, 2008.

  1. nbyte

    nbyte New Member

    Blog Posts:
    0
    Joined:
    May 27, 2007
    Messages:
    161
    Здравствуйте.
    Подскажите пожалуйста кто знает.
    Есть у меня следующий код

    Code (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

    Blog Posts:
    0
    Joined:
    Aug 16, 2009
    Messages:
    283
    Во я тему нашел )
    У меня с этой функцией хрень какая то твориться.

    Code (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

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

    IceCrashLdr New Member

    Blog Posts:
    0
    Joined:
    Jun 29, 2010
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Jul 2, 2009
    Messages:
    2
    Можно ли этим апи поставить неподписаный драйвер?

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

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

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    BOBO
    Подпишите свой. Что сложного. Как подписывать - гуглим!
     
  7. BOBO

    BOBO New Member

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

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