Установка драйвера WinUSB, ошибка 0x00000003 - PullRequest
2 голосов
/ 09 февраля 2012

Следующий INF-файл был адаптирован из Microsoft WinUSB Руководство по установке

Аппаратный ключ USBPRINT \ DatamaxM4308-MarkII013B, поставщик и PID должны быть правильными (скопировано из INF-файла официального драйвера)

При попытке установить драйвер на Vista 32bit я получаю «Операция не может быть завершена (ошибка 0x00000003)» Средство просмотра событий Windows не регистрирует мои попытки установить драйвер.

C: \ Windows \ inf \ setupapi.dev.log регистрирует следующее:

Opened PNF: 'C:\Windows\INF\winusb.inf' ([strings.0409] <src=drvstore>)

cmi:      File::CopyFileUsingSymbolicLink(C:\Windows\system32\DriverStore\Temp\{42263e41-28c1-4fbc-a15e-36e516ea8ab1}\Package\winusb.sys, \\?\C:\Windows\system32\DriverStore\FileRepository\datamax.inf_4d12d90f\winusb.s
cmi:      CopyFile from C:\Windows\system32\DriverStore\Temp\{42263e41-28c1-4fbc-a15e-36e516ea8ab1}\Package\winusb.sys to \\?\C:\Windows\system32\DriverStore\FileRepository\datamax.inf_4d12d90f\winusb.sys failed 2
cmi:      CopyFile(source=C:\Windows\system32\DriverStore\Temp\{42263e41-28c1-4fbc-a15e-36e516ea8ab1}\Package\winusb.sys, destination=\\?\C:\Windows\system32\DriverStore\FileRepository\datamax.inf_4d12d90f\winusb.sys, 

Что я делаю не так? Нужно ли копировать winusb.sys в структуру папок драйвера? Я думал, что это было сделано автоматически с помощью CoInstaller?

Структура папок выглядит следующим образом:

-DriverFolder
            |
            Datamax.inf
            Datamax.cat
            + amd64
                  |
                  WdfCoInstaller01009.dll
                  winusbcoinstaller2.dll
            + i386
                  |
                  WdfCoInstaller01009.dll
                  winusbcoinstaller2.dll

Datamax.Inf:

[Version]
Signature = "$Windows NT$"
Class = Printer
ClassGuid={4D36E979-E325-11CE-BFC1-08002BE10318}
Provider = %ProviderName%
CatalogFile=Datamax.cat
DriverVer=02/08/2012,1.0.0.1

; ================== Class section ==================

[ClassInstall32]
Addreg=MyDeviceClassReg

[MyDeviceClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ProviderName% = MyDevice_WinUSB,NTx86,NTamd64

[MyDevice_WinUSB.NTx86]
%USB\MyDevice.DeviceDesc% =USBPRINT\DatamaxM4308-MarkII013B, USB\VID_0B0B&PID_106E

[MyDevice_WinUSB.NTamd64]
%USB\MyDevice.DeviceDesc% =USBPRINT\DatamaxM4308-MarkII013B, USB\VID_0B0B&PID_106E

; =================== Installation ===================

;[1]
[USBPRINT\DatamaxM4308-MarkII013B]
Include=winusb.inf
Needs=WINUSB.NT

;[2]
[USBPRINT\DatamaxM4308-MarkII013B.Services]
Include=winusb.inf
Needs=WINUSB.NT.Services

;[3]
[USBPRINT\DatamaxM4308-MarkII013B.Wdf]
KmdfService=WINUSB, WinUSB_Install

[WinUSB_Install]
KmdfLibraryVersion=1.9

;[4]
[USBPRINT\DatamaxM4308-MarkII013B.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{FDA075ED-3109-4B76-8D70-CD4E65F3817C}"

;[5]
[USBPRINT\DatamaxM4308-MarkII013B.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"

[CoInstallers_CopyFiles]
WinUSBCoInstaller2.dll
WdfCoInstaller01009.dll

[DestinationDirs]
CoInstallers_CopyFiles=11

; ================= Source Media Section =====================
;[7]

[SourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64

[SourceDisksFiles.x86]
WinUSBCoInstaller2.dll=1
WdfCoInstaller01009.dll=1

[SourceDisksFiles.amd64]
WinUSBCoInstaller2.dll=2
WdfCoInstaller01009.dll=2

; =================== Strings ===================

[Strings]
ProviderName="MyWinUsbTest"
USB\MyDevice.DeviceDesc="Test using WinUSB only"
WinUSB_SvcDesc="WinUSB Test"
DISK_NAME="My Install Disk"
ClassName="Printer"

1 Ответ

2 голосов
/ 24 октября 2012

По моему опыту, 0x00000003 означает, что было исключение из-за отказа в доступе. Процесс должен быть запущен от имени администратора, если на Vista или выше.

...