Esempio n. 1
0
DWORD DriverInstall(_In_ HANDLE hHeap, _In_ LPTSTR lpInfPath, _In_ int nCmdShow)
{
	INSTALLERINFO installerInfo;
	DWORD dwFlags;
	BOOL needReboot;
	LPVOID lpData;
	DWORD res;

	Trace(TEXT("DriverInstall(%s, %d)"), lpInfPath, nCmdShow);

	res = CreateInstallInfo(hHeap, &installerInfo, &lpData);
	if (res == ERROR_SUCCESS) {
		if (nCmdShow == SW_HIDE)
			dwFlags = DRIVER_PACKAGE_SILENT;
		else
			dwFlags = 0;

		res = DriverPackageInstall(lpInfPath, dwFlags, &installerInfo, &needReboot);
		if (res != ERROR_SUCCESS && res != ERROR_NO_SUCH_DEVINST)
			Trace(TEXT("DriverPackageInstall failed: %08X"), res);

		HeapFree(hHeap, 0, lpData);
	}

	return res;
}
Esempio n. 2
0
DWORD DriverUninstall(_In_ HANDLE hHeap, _In_ LPTSTR lpInfPath, _In_ int nCmdShow)
{
	INSTALLERINFO installerInfo;
	LPTSTR lpDsInfPath;
	DWORD cbDsInfPath, dwFlags;
	BOOL needReboot;
	LPVOID lpData;
	DWORD res;

	Trace(TEXT("DriverUninstall(%s, %d)"), lpInfPath, nCmdShow);

	cbDsInfPath = 0;
	res = DriverPackageGetPath(lpInfPath, NULL, &cbDsInfPath);
	if (res == ERROR_INSUFFICIENT_BUFFER) {
		lpDsInfPath = (LPTSTR) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cbDsInfPath * sizeof(TCHAR));
		if (lpDsInfPath) {
			res = DriverPackageGetPath(lpInfPath, lpDsInfPath, &cbDsInfPath);
			if (res == ERROR_SUCCESS) {
				Trace(TEXT("DsInfPath: %s"), lpDsInfPath);

				res = CreateInstallInfo(hHeap, &installerInfo, &lpData);
				if (res == ERROR_SUCCESS) {
					if (nCmdShow == SW_HIDE)
						dwFlags = DRIVER_PACKAGE_SILENT;
					else
						dwFlags = 0;

					res = DriverPackageUninstall(lpDsInfPath, dwFlags, &installerInfo, &needReboot);
					if (res != ERROR_SUCCESS)
						Trace(TEXT("DriverPackageUninstall failed: %08X"), res);

					if (lpData)
						HeapSafeFree(hHeap, 0, lpData);
				}
			} else
				Trace(TEXT("DriverPackageGetPath 2 failed: %08X"), res);

			HeapSafeFree(hHeap, 0, lpDsInfPath);
		} else
			Trace(TEXT("HeapAlloc failed"));
	} else
		Trace(TEXT("DriverPackageGetPath 1 failed: %08X"), res);

	return res;
}