Condividi tramite


Errore InfVerif 1330 - 1333

L'errore InfVerif 1330 consente di evitare un errore funzionale in cui un file di destinazione viene sovrascritto da più file di origine. Ad esempio:

[CopyFiles.A]
DesiredFileName1,SourceFile1A ; Used by DDInstallSection A

[CopyFiles.B]
DesiredFileName1,SourceFile1B ; Used by DDInstallSection B

Quando più sezioni DDInstall copiano file di origine diversi in un singolo file di destinazione usando la direttiva CopyFiles , questi CopyFiles potrebbero entrare in conflitto se tutte le sezioni DDInstall vengono elaborate nello stesso sistema. Ad esempio, se due dispositivi diversi usano lo stesso driver ma sezioni di installazione diverse o in alcuni scenari di creazione e distribuzione di driver offline. Poiché più file di origine delle diverse sezioni DDInstall vengono copiati nello stesso file di destinazione singolo esatto, i diversi file di origine di sezioni DDInstall si sovrascrivono tra loro in modo che l'ultimo file copiato sia quello inserito nella destinazione, che potrebbe non essere i risultati previsti.

Casi

Questo documento fornisce indicazioni su come aggiornare la sintassi precedente ai metodi che rimuovono l'errore funzionale per i casi seguenti. Non tutti i casi sono elencati di seguito, perché potrebbero esserci altri motivi specifici per ogni INF.

  • Diverse sezioni DDInstall rinominano un file binario del servizio per un servizio

  • Diverse sezioni DDInstall rinominano un file di origine per essere copiati in un percorso di file di destinazione a cui si accede dal driver o da un'applicazione in modalità utente

Diverse sezioni DDInstall rinominano un file binario del servizio per un servizio

Il codice seguente è un esempio di come le diverse sezioni DDInstall possano rinominare un file binario del servizio per un servizio:

[DDInstallSection_A]
CopyFiles = CopyFiles.A

[DDInstallSection_B]
CopyFiles = CopyFiles.B

[CopyFiles.A]
ServiceBinaryFile, ServiceBinaryA

[CopyFiles.B]
ServiceBinaryFile, ServiceBinaryB

[DDInstallSection_A.Services]
AddService = ServiceName, 0x00000002, ServiceName_Install

[DDInstallSection_B.Services]
AddService = ServiceName, 0x00000002, ServiceName_Install

[ServiceName_Install]
ServiceType    = 1
StartType      = 3
ErrorControl   = 0
ServiceBinary  = %12%\ServiceBinaryFile

Per aggiornare questo codice, creare nomi di servizio diversi per i diversi file binari:

[DDInstallSection_A]
CopyFiles = CopyFiles.A

[DDInstallSection_B]
CopyFiles = CopyFiles.B

[CopyFiles.A]
ServiceBinaryA

[CopyFiles.B]
ServiceBinaryB

[DDInstallSection_A.Services]
AddService = ServiceName1, 0x00000002, ServiceName1_Install

[DDInstallSection_B.Services]
AddService = ServiceName2, 0x00000002, ServiceName2_Install

[ServiceName1_Install]
ServiceType    = 1
StartType      = 3
ErrorControl   = 0
ServiceBinary  = %12%\ServiceBinaryA

[ServiceName2_Install]
ServiceType    = 1
StartType      = 3
ErrorControl   = 0
ServiceBinary  = %12%\ServiceBinaryB

Diverse sezioni DDInstall rinominano un file di origine per essere copiati in un percorso di file di destinazione a cui si accede dal driver o da un'applicazione in modalità utente

In questo caso, il driver accede a un percorso di file fisso usato come percorso di file dinamico. Per avere una variabile dinamica che tiene traccia di più file di origine, è possibile usare una voce AddReg HKR per archiviare il percorso che può essere recuperato in fase di esecuzione. Ciò funziona perché le voci AddReg HKR vengono archiviate in relazione a un dispositivo.

La voce AddReg HKR specifica i percorsi dei file di origine anziché scegliere un singolo file di destinazione in cui copiare i file di origine:

[A.AddReg]
HKR,, FileName1Path, "%13%\SourceFile1A"

[B.AddReg]
HKR,, FileName1Path, "%13%\SourceFile1B"

Anziché accedere a un percorso di file fisso, il percorso del file di destinazione può essere recuperato da un'impostazione nel dispositivo. Il percorso del file di destinazione viene archiviato in un valore del Registro di sistema da INF e recuperato tramite chiamate API nel driver.

Per effettuare il provisioning dei valori tramite un INF, usare la direttiva INF AddReg usando le voci reg-root HKR in una sezione del registro dei componenti aggiuntivi a cui si fa riferimento da una sezione INF DDInstall o da una sezione INF DDInstall.HW.

Poiché i valori del Registro di sistema tengono traccia del file di destinazione anziché di un singolo percorso di file di destinazione, il driver dovrà accedere in modo diverso a tali file. Per accedere al file di destinazione, il driver deve ora chiamare in una delle API seguenti per aprire il valore del Registro di sistema e restituire il percorso del file di origine:

WDM

CDR

Altro codice in modalità utente

Nota

In questo esempio, il percorso di destinazione dei file che i payload INF non influiscono sulla soluzione. Tuttavia, per usare le procedure consigliate, l'esempio usa DIRID 13 poiché offre installazioni più veloci tramite un minor numero di copie di file. Per altre informazioni, vedere "Uso di DIRID" e "Esegui dall'archivio driver".

Il codice di esempio seguente illustra come aggiornare un INF che usa la sintassi precedente.

Dettagli per i diversi file di origine mappati a un file di destinazione

Codice sorgente Commento
[DestinationDirs] CopyFiles.A = 12 CopyFiles.B = 12
[DDInstallSection_A] CopyFiles = CopyFiles.A
[DDInstallSection_B] CopyFiles = CopyFiles.B

Selezionare la posizione dei file manualmente
[CopyFiles.A]
DesiredFileName1,SourceFile1A ; HW Version A
DesiredFileName2,SourceFile2A ; HW Version A
[CopyFiles.B] DesiredFileName1,SourceFile1B ; HW Version B DesiredFileName2,SourceFile2B ; HW Version B

Tecnica di copia file: ridenominazione dei file in modo che la sezione DDInstall installata seleziona il file di origine da copiare nel percorso del file di destinazione a cui è collegato il driver.

Questo non funziona nel caso in cui tutti i file per tutte le sezioni DDInstall vengano copiati prima dell'installazione.

Dettagli per l'udazione tramite le voci AddReg HKR

Codice sorgente Commento
[DestinationDirs] CopyFiles.A = 13 CopyFiles.B = 13 

È consigliabile lasciare tutto nella directory dell'archivio driver (Dirid 13)
[DDInstallSection_A] CopyFiles = CopyFiles.A
[DDInstallSection_A.HW] AddReg = A.AddReg
[DDInstallSection_B] CopyFiles = CopyFiles.B
[DDInstallSection_B.HW] AddReg = B.AddReg


Aggiungere una sezione AddReg per ogni DDInstall Section.HW per tenere traccia dei file necessari per l'installazione.
[A.AddReg] HKR,, FileName1Path, "%13%\SourceFile1A" HKR,, FileName2Path, "%13%\SourceFile2A"
[B.AddReg] HKR,, FileName1Path, "%13%\SourceFile1A" HKR,, FileName2Path, "%13%\SourceFile2A"


Più percorsi di file di origine mappati a un valore del Registro di sistema. Ciò funziona perché HKR AddReg da una sezione DDInstall o DDInstall.HW vengono archiviati nelle impostazioni del dispositivo. Quando un dispositivo viene installato con questo pacchetto driver, verrà usato solo una delle sezioni DDInstall, quindi verrà usato solo uno dei componenti aggiuntivi HKR e non si verifica un conflitto.
[CopyFiles.A]
SourceFile1A ; HW Version A
SourceFile2A ; HW Version A
[CopyFiles.B] SourceFile1B ; HW Version B SourceFile2B ; HW Version B

Tutti i file eseguono il mapping alla propria posizione in modo che non siano presenti errori di funzionalità e INF passi InfVerif.
Non usare CopyFiles per rinominare un file per il quale DestinationDirs include Dirid 13.

Accesso al percorso del file dal driver (pseudo-codice)

Before (Fixed Filename):
    OpenFile(Path\DesiredFileName1)

After (Dynamic Filename):
    OpenDeviceRegistryKey(Device, &KeyHandle)
    RegistryKeyQueryValue(KeyHandle, FileNamePath1, &SourceFile)
    OpenFile(SourceFile)

Accesso al percorso del file dalla modalità utente

Quando si accede al file di destinazione dalla modalità utente, non si avrà il contesto del dispositivo di cui dispone un driver. In questo caso è necessario aggiungere un passaggio aggiuntivo. Prima di aprire l'handle della chiave, trovare il dispositivo che contiene il valore del Registro di sistema che indica il file da caricare.

Vedere Eseguire dall'archivio driver per informazioni su come filtrare un elenco di dispositivi per trovare il dispositivo e aprire l'handle nel percorso del Registro di sistema in modalità utente, usando Dirid 13 per le procedure consigliate.

Errori 1331 - 1333

Gli errori 1331 - 1333 sono tutti gli stessi problemi, ma relativi rispettivamente ai valori registy, ai valori del Registro di sistema all'interno dei servizi e ai servizi. Gli esempi nella documentazione per l'errore 1330 illustrano le tecniche per risolvere gli errori 1331 - 1333.