UpdateDriverForPlugAndPlayDevices

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

  1. nbyte

    nbyte New Member

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

    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
    Во я тему нашел )
    У меня с этой функцией хрень какая то твориться.

    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
    Этот же код не в контексте сервиса, работает нормально. Видно под сервисом, что то не так работает.(затык идет в newdev!DoDeviceWizard - она хоть и возвращает что все хорошо, но ставит ошибку: 0xc0000139) В контексте другого процесса, ошибку она не устанавливает.
    Также если вызывать из под сервиса, то вызывается pSetupGetGlobalFlags\pSetupSetGlobalFlags - из под обычного приложения нет. Не в курсе что функции делают, но друг кому то когда то пригодиться.
     
  4. IceCrashLdr

    IceCrashLdr New Member

    Blog Posts:
    0
    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
    Можно ли этим апи поставить неподписаный драйвер?

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

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

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

    Blog Posts:
    2
    BOBO
    Подпишите свой. Что сложного. Как подписывать - гуглим!
     
  7. BOBO

    BOBO New Member

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

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