Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En drivrutin som hanterar WMI-IRP:er i sin DispatchSystemControl-rutin måste endast hantera en sådan IRP om enhetsobjektpekaren på Parameters.WMI.ProviderId matchar pekaren som drivrutinen skickade i sitt anrop till IoWMIRegistrationControl. Annars måste drivrutinen vidarebefordra IRP till nästa lägre drivrutin.
Om drivrutinen hanterar begäran måste den:
Kontrollera GUID på Parameters.WMI.DataPath för att avgöra om det representerar ett datablock som stöds av drivrutinen och, om inte, låt IRP misslyckas med STATUS_WMI_GUID_NOT_FOUND.
En förare bör kontrollera indata WNODE_XXX-strukturen på Parameters.WMI.Buffer för instansnamnet vid hantering av någon av följande begäranden:
IRP_MN_QUERY_SINGLE_INSTANCEIRP_MN_CHANGE_SINGLE_INSTANCEIRP_MN_CHANGE_SINGLE_ITEMIRP_MN_EXECUTE_METHOD Drivrutinen bör söka efter instansnamnet på följande sätt:
Om WNODE_FLAG_STATIC_INSTANCE_NAMES anges i WnodeHeader.Flags använder du InstanceIndex som ett index i drivrutinslistan över statiska instansnamn för blocket.
Om WNODE_FLAG_STATIC_INSTANCE_NAMES är tydligt i WnodeHeader.Flags använder du OffsetInstanceName som förskjutning till instansnamnsträngen i indata WNODE_XXX-strukturen . OffsetInstanceName är förskjutningen i byte från början av strukturen till en USHORT som anger längden på instansnamnsträngen i byte (inte tecken), inklusive NUL-avslutaren om den finns, följt av själva strängen i Unicode.
Om drivrutinen inte kan hitta den instans som anges av InstanceIndex eller OffsetInstanceName måste den avvisa IRP:n med STATUS_WMI_INSTANCE_NOT_FOUND.
För en IRP_MN_EXECUTE_METHOD begäran kontrollerar du MethodID i indata WNODE_METHOD_ITEM och, om metoden inte är giltig för datablocket, misslyckas IRP med STATUS_WMI_ITEMID_NOT_FOUND.
Om begäran genererar utdata bör en drivrutin kontrollera buffertens storlek på Parameters.WMI.BufferSize när någon av följande begäranden hanteras:
IRP_MN_QUERY_ALL_DATAIRP_MN_QUERY_SINGLE_INSTANCEIRP_MN_EXECUTE_METHOD Om bufferten är för liten för att ta emot utdata, men minst sizeof(WNODE_TOO_SMALL), ska drivrutinen slutföra IRP och skriva en WNODE_TOO_SMALL struktur till bufferten på Parameters.WMI.Buffer. Om bufferten är mindre än sizeof(WNODE_TOO_SMALL) misslyckas drivrutinen IRP med en NTSTATUS-kod på STATUS_BUFFER_TOO_SMALL.
Om begäran genererar utdata och buffertstorleken är tillräcklig skriver du följande utdata till bufferten på Parameters.WMI.Buffer:
- För en IRP_MN_QUERY_ALL_DATA begäran skriver drivrutinen en WNODE_ALL_DATA struktur som innehåller data för alla instanser av det angivna datablocket.
- För en IRP_MN_QUERY_SINGLE_INSTANCE begäran skriver drivrutinen en WNODE_SINGLE_INSTANCE struktur som innehåller data för den angivna instansen av ett datablock.
- För en IRP_MN_EXECUTE_METHOD om metoden genererar utdata skriver drivrutinen metodutdata i drivrutinsbestämt format efter indata WNODE_METHOD_ITEM i bufferten (skriver över indata, om några).
Ange Irp-IoStatus.Information> till antalet byte som skrivits till bufferten på Parameters.WMI.Buffer och Irp-IoStatus.Status> till STATUS_SUCCESS.
Anropa IoCompleteRequest för att slutföra IRP.
Mer information finns i WMI WNODE_XXX-strukturer.