Здравствуйте. Подскажите пожалуйста кто знает. Есть у меня следующий код Код (Text): if not UpdateDriverForPlugAndPlayDevices(Handle, @HardwareId, PChar(InfFile), INSTALLFLAG_FORCE, @Reboot) then begin ShowMessage(SysErrorMessage(GetLastError)); Exit; end; При выполнении получаю ошибку. Я чтото неправильно передаю, только немогу понять что или возможно HardwareId нетакой тока незнаю откуда его взять правильный. Можете посмотреть, может ктонибудь увидит в чём тут дело.
Во я тему нашел ) У меня с этой функцией хрень какая то твориться. Код (Text): newdevMod = LoadLibrary(TEXT("newdev.dll")); if ( !newdevMod ) { DBGMSG("Error:LoadLibrary fails."); goto Label_return; } UpdateFn = (UpdateDriverForPlugAndPlayDevicesProto)GetProcAddress( newdevMod , "UpdateDriverForPlugAndPlayDevicesW" ); if ( !UpdateFn ) { DBGMSG("Error:GetProcAddress fails."); goto Label_return; } __debugbreak(); if( !UpdateFn( NULL , L"root\\rdpdr" , FullPathToMachineInf , INSTALLFLAG_FORCE , &reboot ) )//INSTALLFLAG_NONINTERACTIVE { DBGMSG("Note:UpdateFn fails. Can be not a error."); goto Label_return; } Функция UpdateDriverForPlugAndPlayDevices возвращает 0 и статус ошибки тоже 0. Что я уже только не пробовал делать, что бы заставить ее работать. Точно такой же код с такими же параметрами с сайта майкрософта(devcon.exe) работает нормально. Пробовал сравнить где исполнение идет не так, но так и не нашел разницы. Само устройство "root\\rdpdr" он находит, все начальные проверки в функции UpdateDriverForPlugAndPlayDevices - исполняются. Смотрел внутренности UpdateDriverForPlugAndPlayDevices до вызова newdev!InstallDeviceInstance все идет хорошо. Поискал в гугле, так и не нашел ответа, у всех UpdateDriverForPlugAndPlayDevices возвращает результат ошибки, у меня нет. ОСь: XP Home Edition SP3 Если кто с таким сталкивался, подскажите куда копать пожалуйста.
Этот же код не в контексте сервиса, работает нормально. Видно под сервисом, что то не так работает.(затык идет в newdev!DoDeviceWizard - она хоть и возвращает что все хорошо, но ставит ошибку: 0xc0000139) В контексте другого процесса, ошибку она не устанавливает. Также если вызывать из под сервиса, то вызывается pSetupGetGlobalFlags\pSetupSetGlobalFlags - из под обычного приложения нет. Не в курсе что функции делают, но друг кому то когда то пригодиться.
DEVINST devRoot; if ( CM_Locate_DevNode_Ex( &devRoot, NULL, CM_LOCATE_DEVNODE_NORMAL, NULL ) != CR_SUCCESS) { return; } CM_Reenumerate_DevNode_Ex( devRoot, 0, NULL );
Можно ли этим апи поставить неподписаный драйвер? Пытаюсь поставить драйвер для самопальной флешки\кардридера на WINXP SP 3, возвращает 0хE000022F, по гуглу говоритсья что это из-за неподписаности. Пробовал разные другие дрова, но все подписаные, ставятся без проблем.
Есть обстоятельства что я не могу сам подписывать этот драйвер и заставить сделать это его разработчика. Мне нужно сделать удаленный установщик, я уже нашел такую штуку как "PrivateHash" и с помощю неё ставить можно локально, теперь нужно разобратся почему это не работает удаленно через psexec. На этом апи остановился потому что оно очень простое, если вы знаете другие апи то буду рад подсказке. Оказалось что виноват psexec нужно открыто вводить логин\пасс, а UpdateDriverForPlugAndPlayDevices в связке с PrivateHash отлично работает.