Allmänna syntaxregler för INF-filer

En INF-fil är en textfil som är uppdelad i namngivna avsnitt. Vissa avsnitt har systemdefinierade namn och vissa avsnitt har namn som bestäms av INF-filens skrivare.

Varje avsnitt innehåller avsnittsspecifika poster som tolkas av enhetsinstallationskomponenter. Vissa poster börjar med ett fördefinierat nyckelord. Dessa posterna kallas för direktiv.

Vissa INF-filposter är i princip pekare från ett avsnitt till ett annat, för ett specifikt syfte. Ett INF AddReg-direktiv identifierar till exempel ett avsnitt som innehåller poster som instruerar Windows att ändra registret. Dessa poster innehåller ibland ytterligare argument (obligatoriska eller valfria) för Windows att tolka under installationen.

Andra INF-filposter pekar inte på andra avsnitt, men anger information som Windows använder under installationen, till exempel filnamn, registervärden, maskinvarukonfigurationsinformation, flaggor och så vidare. Ett INF DriverVer-direktiv tillhandahåller till exempel information om drivrutinsversionen.

När Windows påbörjar en installation letar den först efter ett AVSNITT om INF-version för att verifiera INF-filens giltighet. Sedan startar installationen genom att hitta ett INF Manufacturer-avsnitt. Det här avsnittet innehåller direktiv till INF Models-avsnitt, som i sin tur tillhandahåller direktiv som leder till olika INF DDInstall-avsnitt, baserat på maskinvaru-ID för den enhet som installeras.

Följande syntaxregler styr det obligatoriska och valfria innehållet i INF-filer, formatet på avsnittsnamn som använder strängtoken samt radformat, fortsättning och kommentarer.

Skiftlägeskänslighet

  • Avsnittsnamn, poster och direktiv är inte skiftlägeskänsliga. Till exempel är version, VERSION och Version lika giltiga avsnittsnamnspecifikationer i en INF-fil.

Obligatoriskt och valfritt innehåll

  • Uppsättningen obligatoriska och valfria avsnitt, poster och direktiv i en viss INF-fil beror på vilken typ av enhet/drivrutin eller komponent som ska installeras.

  • Den uppsättning avsnitt, avsnittsspecifika poster och direktiv som krävs för att installera en viss enhet och dess drivrutiner beror också något på motsvarande klassinstallationsprogram, om det finns en sådan. Mer information om hur de systemlevererade klassinstallationsprogrammen hanterar enhetstypspecifika INF-filer finns i den enhetstypspecifika dokumentationen i WDK.

  • I syntaxdefinitioner avgränsas valfria poster av inte fetstilta hakparenteser ([,]). Däremot är fet hakparenteser ([, ]) obligatoriska element i posten där de finns. I följande exempel krävs hakparenteserna runt Version, medan hakparenteserna runt Class=class-name anger att den här posten är valfri.

    [Version]
    
    Signature="signature-name"
    [Class=class-name]
    ...
    

Avsnittsnamn

  • Avsnitt kan anges i valfri ordning. De flesta INF-filer listar avsnitt i en viss ordning, enligt konvention, men Windows hittar avsnitt efter namn, inte efter plats i INF-filen.

  • Varje avsnitt i en INF-fil börjar med avsnittsnamnet inom hakparenteser ([ ]). Avsnittsnamnet kan vara systemdefinierat eller INF-författardefinierat.

    [Tillverkare] anger till exempel början av avsnittet Tillverkare med systemnamn, medan [Std.Mfg] representerar ett visst INF-författardefinierat modellavsnitt.

    Ett avsnittsnamn har en maximal längd på 255 tecken på Windows 2000 och senare versioner av Windows.

    Varje avsnitt slutar i början av ett nytt [section-name] eller vid filslutsmarkeringen.

  • Om fler än ett avsnitt i en INF-fil har samma namn sammanfogar systemet deras poster och direktiv i ett enda avsnitt.

  • Om det inte omges av dubbla citattecken (") måste ett INF-författardefinierat avsnittsnamn vara en ociterad sträng som är unik för INF-filen och består av explicit synliga tecken, med undantag för vissa tecken med INF-specifika betydelser. I synnerhet kan ett avsnittsnamn utan citattecken som refereras till av en avsnittspost eller ett direktiv inte ha inledande eller avslutande blanksteg, ett radmatningstecken, ett returtecken eller något osynligt kontrolltecken, och det bör inte innehålla flikar. Dessutom kan den inte innehålla något av hakparentestecknen ([ ]), ett enskilt procenttecken (%), ett semikolon (;) eller några interna dubbla citattecken ("), och den kan inte ha ett omvänt snedstreck (\) som sitt sista tecken.

    Till exempel är Std.Mfg och Std_Mfg unika och giltiga avsnittsnamn när de refereras till av en INF-filpost eller -direktiv, men Std; Mfg (med sitt interna semikolon) är ogiltigt om det inte omges av dubbla citattecken (").

    Om du anger ett INF-författardefinierat avsnittsnamn som en "citerad sträng" åsidosätts de flesta av de begränsningar som tidigare beskrevs för tecken i refererade avsnittsnamn. Ett sådant avgränsat avsnittsnamn kan innehålla nästan alla explicita eller implicit synliga tecken förutom den avslutande hakparentesen (]) så länge motsvarande avsnitt i INF-filen matchar den här "citerade strängen" exakt.

    Till exempel ";; Std Mfg " är en giltig referens för avsnittsnamn om motsvarande avsnittsdeklaration i INF-filen exakt matchar namnet inom de dubbla citattecknen med avseende på dess blanksteg och semikolontecken som [;; Std Mfg ].

Användning av strängtoken

  • Många värden i en INF-fil, inklusive INF-skrivardefinierade avsnittsnamn, kan uttryckas som strängnyckeltoken av formen %strkey%. I avsnittet Strings i INF-filen måste varje strängnyckel associeras med ett strängvärde som består av en sekvens med explicit synliga tecken. Om det behövs konverterar installationskoden strängvärdet till Unicode.

    Mer information om hur du definierar %strkey-token% och deras respektive värden finns i beskrivningen av avsnittet INF-strängar.

Radformat, fortsättning och kommentarer

  • Varje post och direktiv i ett avsnitt slutar med ett retur- eller radmatningstecken. Därför får textredigeraren som används för att skapa en INF-fil inte infoga retur- eller radmatningstecken efter ett godtyckligt, redigeringsbestämt antal tecken.

  • Omvänt snedstreck (\) kan användas som en explicit linjekontinuator i en post eller ett direktiv. Omvänt snedstreck används dock även i sökvägsspecifikationer. Använd följande strategi för att säkerställa att ett bakstreck som förekommer i en sökvägsspecifikation inte misstolkas som ett radfortsättningstecken:

    • För ett direktiv som sträcker sig över två rader, varav en är en post som innehåller ett omvänt snedstreck, använder du citattecken för att avgränsa posten som innehåller omvänt snedstreck.

      CopyFiles = "SomeDirectory\"\
      ,SomeFile
      
    • Undvik att använda bakstreck på det sätt som visas i följande exempel. Windows ignorerar det första omvänt snedstrecket och tolkar det andra omvänt snedstrecket som en linjekontinuator.

      CopyFiles = SomeDirectory\\
      ,SomeFile
      
    • Följande syntax är giltig och motsvarar CopyFiles = "SomeDirectory\",SomeFile ; comment.

      CopyFiles = "SomeDirectory\"\ ; comment 
      ,SomeFile
      

      Eftersom text efter ett semikolon ignoreras; CopyFiles = "SomeDirectory\" ; comment ,SomeFile fungerar det inte.

  • Kommentarer börjar med ett semikolontecken (;). När du parsar och tolkar en INF-fil förutsätter systemet att följande inte har någon relevans för installationsprocessen:

    • Tecken som följer ett semikolon på samma rad, såvida inte semikolonet visas inom en "citerad sträng" eller %strkey-token%
    • En tom rad som inte innehåller något annat än ett radmatnings- eller returtecken
  • Kommatecken separerar de värden som anges i avsnittsposter och direktiv.

    En INF-filpost eller ett direktiv kan utelämna ett valfritt värde mitt i en lista med värden, men kommatecken måste finnas kvar. INF-filer kan utelämna avslutande kommatecken.

    Tänk till exempel på syntaxen för en post i avsnittet SourceDisksFiles:

    filename=diskid[,[subdir][,size]]

    En post som utelämnar subdir-värdet men som tillhandahåller storleksvärdet måste ange kommaavgränsarna för båda värdena, enligt följande exempel:

    filnamn=diskid,,storlek

    En post i en INF-fil som utelämnar de två valfria värdena kan ha det här formatet:

    filnamn=diskid

  • Om du vill inkludera ett procenttecken (%) i värden som anges i avsnittsposter och -direktiv kan du föregå procenttecknet med ett extra procenttecken.

    Betrakta till exempel följande påstående i avsnittet [add-registry-section]:

    HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll"

    Registervärdet ställs in på följande värde:

    %SystemRoot%\System32\IoLogMsg.dll

  • Om du vill inkludera tecknet dubbelt citattecken (") i värden som anges i avsnittsposter och direktiv, kan du föregå det dubbla citattecknet med ett annat dubbelt citattecken. Observera att strängen måste ligga inom en "citerad sträng".

    Tänk dig till exempel det här påståendet i avsnittet [add-registry-section]:

    HKR,,Exempel,,"Visa en ""exempel""-sträng"

    Registervärdet kommer att ställas in med följande värde:

    Visa en "exempel"-sträng

INF-storleksgränser

  • Den maximala längden, i tecken, för ett INF-filfält, före strängersättning och inklusive ett avslutande NULL-tecken, är 4096.

  • Efter strängersättning är den maximala längden, i tecken, för en INF-filsträng 4096 tecken, inklusive ett avslutande NULL-tecken.

  • Tänk dock på att technológia Plug and Play (PnP) kan införa en mer restriktiv gräns för vissa INF-filfält som den känner igen eller använder, till exempel enhetsbeskrivning, drivrutinsprovider och enhetstillverkare.