#include <Windows.h>
#include <tchar.h>
#include <newdev.h>
#pragma comment(lib, "newdev.lib")
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{
int nRet = -1;
PROCESS_INFORMATION pi = { 0 };
do
{
LPCTSTR arrInfFile = TEXT("driver\\android_winusb.inf");
TCHAR szHardwareIDs[][MAX_PATH] = {
_T("USB\\Class_FF&SubClass_42&Prot_01"),
_T("USB\\Class_FF&SubClass_42&Prot_03")
};
BOOL bRebootRequired = FALSE;
BOOL bNeedCallX64 = FALSE;
for(int i=0; i<_countof(szHardwareIDs); i++)
{
if(::UpdateDriverForPlugAndPlayDevices(0, szHardwareIDs[i],
arrInfFile, INSTALLFLAG_FORCE, &bRebootRequired))
{
nRet = 0;
break;
}
DWORD dwLastError = ::GetLastError();
if(dwLastError == 0)
{
nRet = -2;
break;
}
if(dwLastError == ERROR_IN_WOW64)
{
bNeedCallX64 = TRUE;
break;
}
nRet = (int)dwLastError;
}
if(!bNeedCallX64)
break;
STARTUPINFO si = { sizeof(si) };
GetStartupInfo(&si);
TCHAR szProcessX64[] = _T("MiDriverInstallX64.exe");
if(!::CreateProcess(NULL, szProcessX64, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi))
{
nRet = -3;
break;
}
::CloseHandle(pi.hThread);
pi.hThread = NULL;
if(::WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_OBJECT_0)
{
nRet = -4;
break;
}
DWORD dwExitCode = 0;
if(!::GetExitCodeProcess(pi.hProcess, &dwExitCode))
{
nRet = -5;
break;
}
nRet = (int)dwExitCode;
} while (0);
if(pi.hThread != NULL)
{
::CloseHandle(pi.hThread);
pi.hThread = NULL;
}
if(pi.hProcess != NULL)
{
::CloseHandle(pi.hProcess);
pi.hProcess = NULL;
}
return nRet;
}
安装驱动,支持已经成为UNKNOW设备的安装
最新推荐文章于 2024-05-28 08:09:17 发布