Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een service kan worden geregistreerd om te worden gestart of gestopt wanneer er een triggergebeurtenis plaatsvindt. Dit elimineert de noodzaak dat services worden gestart wanneer het systeem wordt gestart, of dat services een poll uitvoeren of actief moeten wachten op een gebeurtenis; een service kan worden gestart wanneer deze nodig is, in plaats van automatisch te starten of er al dan niet werk te doen is. Voorbeelden van vooraf gedefinieerde triggergebeurtenissen zijn aankomst van een apparaat van een opgegeven apparaatinterfaceklasse of beschikbaarheid van een bepaalde firewallpoort. Een service kan zich ook registreren voor een aangepaste trigger-gebeurtenis die wordt gegenereerd door een Event Tracing for Windows (ETW)-provider.
Windows Server 2008, Windows Vista, Windows Server 2003 en Windows XP: Service trigger gebeurtenissen worden pas ondersteund als Windows Server 2008 R2 en Windows 7.
Een trigger bestaat uit een triggergebeurtenistype, een triggergebeurtenissubtype, de actie die moet worden uitgevoerd als reactie op de triggergebeurtenis en (voor bepaalde triggergebeurtenistypen) een of meer triggerspecifieke gegevensitems. Het subtype en de triggerspecifieke gegevensitems geven samen de voorwaarden op voor het melden van de service van de gebeurtenis. De indeling van een gegevensitem is afhankelijk van het gebeurtenistype trigger; een gegevensitem kan binaire gegevens, een tekenreeks of een multistring zijn. Tekenreeksen moeten Unicode zijn; ANSI-tekenreeksen worden niet ondersteund.
Als u zich wilt registreren voor trigger-gebeurtenissen, roept de service ChangeServiceConfig2 aan met SERVICE_CONFIG_TRIGGER_INFO en levert deze een SERVICE_TRIGGER_INFO structuur. De SERVICE_TRIGGER_INFO structuur verwijst naar een matrix van SERVICE_TRIGGER structuren, die elk één trigger opgeven.
De opgegeven triggeractie wordt uitgevoerd als de triggervoorwaarde waar is wanneer het systeem wordt gestart of als de triggervoorwaarde waar wordt terwijl het systeem wordt uitgevoerd. Als een service bijvoorbeeld wordt geregistreerd wanneer een bepaald apparaat beschikbaar is, wordt de service gestart wanneer het systeem wordt gestart als het apparaat al is aangesloten op de computer; de service wordt gestart wanneer het apparaat binnenkomt als de gebruiker het apparaat aansluit terwijl het systeem wordt uitgevoerd.
Als een trigger specifieke gegevensitems bevat, wordt de triggeractie alleen uitgevoerd als het gegevensitem dat bij de triggergebeurtenis hoort, overeenkomt met een van de gegevensitems die door de service zijn opgegeven met de trigger. Binaire gegevens worden vergeleken met bitsgewijze vergelijkingen. Tekenreekskoppeling is hoofdlettergevoelig. Als het gegevensitem een multistring is, moeten alle tekenreeksen in de multistring overeenkomen.
Wanneer een service wordt gestart als reactie op een trigger-gebeurtenis, ontvangt de service SERVICE_TRIGGER_STARTED_ARGUMENT als argv[1] in de functie ServiceMain callback. Argv[0] is altijd de korte naam van de service.
Een service die wordt geregistreerd als reactie op een triggergebeurtenis, kan zichzelf stoppen na een time-out voor inactiviteit wanneer de service geen werk te doen heeft. Een service die zichzelf stopt, moet worden voorbereid om SERVICE_CONTROL_TRIGGEREVENT controleaanvragen af te handelen die binnenkomen terwijl de service zichzelf stopt. De SCM verzendt een SERVICE_CONTROL_TRIGGEREVENT controleaanvraag wanneer er een nieuwe trigger-gebeurtenis plaatsvindt terwijl de service de status Actief heeft. Om te voorkomen dat triggergebeurtenissen verloren gaan, moet de service ERROR_SHUTDOWN_IN_PROGRESS retourneren voor elke SERVICE_CONTROL_TRIGGEREVENT controleaanvraag die binnenkomt terwijl de service wordt uitgevoerd naar gestopt. Hiermee wordt de SCM geïnstrueerd om triggergebeurtenissen in de wachtrij te plaatsen en te wachten totdat de service de status gestopt heeft. De SCM voert vervolgens de actie uit die is gekoppeld aan de triggergebeurtenis in de wachtrij, zoals het starten van de service.
Wanneer de service klaar is om triggergebeurtenissen opnieuw af te handelen, wordt SERVICE_ACCEPT_TRIGGEREVENT ingesteld in het door besturingselementen geaccepteerde masker in een aanroep naar SetServiceStatus. Dit gebeurt meestal wanneer de service SetServiceStatus aanroept met SERVICE_RUNNING. De SCM geeft vervolgens een SERVICE_CONTROL_TRIGGEREVENT aanvraag uit voor elke triggergebeurtenis in de wachtrij totdat de wachtrij leeg is.
Een service met afhankelijke services die worden uitgevoerd, kan niet worden gestopt als reactie op een triggergebeurtenis.
Aanvragen voor trigger-start en trigger-stop worden niet gegarandeerd onder weinig geheugen.
Gebruik de functie QueryServiceConfig2 om de configuratie van trigger-gebeurtenissen van een service op te halen.
Het SC-hulpprogramma (sc.exe) kan worden gebruikt om trigger-gebeurtenissen van een service te configureren of op te vragen bij de opdrachtprompt. Gebruik de optie triggerinfo om een service te configureren die moet worden gestart of gestopt als reactie op een trigger-gebeurtenis. Gebruik de optie qtriggerinfo om een query uit te voeren op de triggerconfiguratie van een service.
In het volgende voorbeeld wordt een query uitgevoerd op de triggerconfiguratie van de W32time-service, die is geconfigureerd om te starten wanneer de computer lid is van een domein en stopt wanneer de computer het domein verlaat.
C:\>sc qtriggerinfo w32time
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: w32time
START SERVICE
DOMAIN JOINED STATUS : 1ce20aba-9851-4421-9430-1ddeb766e809 [DOMAIN JOINED]
STOP SERVICE
DOMAIN JOINED STATUS : ddaf516e-58c2-4866-9574-c3b615d42ea1 [NOT DOMAIN JOINED]
In het volgende voorbeeld wordt een query uitgevoerd op de triggerconfiguratie van de tabletinvoerservice, die is geconfigureerd om te starten wanneer een HID-apparaat met de GUID- {4d1e55b2-f16f-11cf-88cb-0011111000030} en een van de opgegeven HID-apparaat-id's binnenkomt.
C:\>sc qtriggerinfo tabletinputservice
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: tabletinputservice
START SERVICE
DEVICE INTERFACE ARRIVAL : 4d1e55b2-f16f-11cf-88cb-001111000030 [INTERFACE CLASS GUID]
DATA : HID_DEVICE_UP:000D_U:0001
DATA : HID_DEVICE_UP:000D_U:0002
DATA : HID_DEVICE_UP:000D_U:0003
DATA : HID_DEVICE_UP:000D_U:0004