На некоторых компьютерах вызов AddPrinterDriver завершается с ошибкой ERROR_ACCESS_DENIED. Моя программа гарантированно работает с правами администратора и копирует DLL-файлы драйвера в C: \ WINDOWS без каких-либо ошибок (отказ в доступе или другие).
// structure for AddPrinterDriver
DRIVER_INFO_3 di3 = { 0 };
di3.cVersion = 3;
di3.pName = _T(MyAppPrinterName) _T(" Driver");
di3.pDefaultDataType = _T("");
// path to driver dll
FilePath file1(strDriverDirectory.c_str());
di3.pDriverPath = (LPTSTR) file1.Append(MyAppPrinterDriverDllFileName).ToString();
// path to driver ui dll
FilePath file2(strDriverDirectory.c_str());
di3.pConfigFile = (LPTSTR) file2.Append(MyAppPrinterUiDllFileName).ToString();
// path to license file
FilePath file3(strDriverDirectory.c_str());
di3.pDataFile = (LPTSTR) file3.Append(_T(MyAppPrinterName) _T(".dat")).ToString();
// add driver
bResult = AddPrinterDriver(NULL, 3, (LPBYTE) &di3);
StoreLastError(_T("AddPrinterDriver"));
if (!bResult)
return FALSE;
Это моя функция DrvPrinterEvent:
BOOL DrvPrinterEvent(
LPWSTR lpwstrPrinterName,
INT iEvent,
DWORD dwFlags,
LPARAM lParam
)
{
return TRUE;
}