Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab Windows Threshold stellen wir eine neue WinRT Lamp API vor, die es ermöglicht, den Kamerablitz zu steuern, ohne eine Windows.Media.Capture.MediaCapture-Instanz erstellen zu müssen. Auf diese Weise kann ein Entwickler eine Taschenlampenanwendung (nur für Beleuchtungszwecke) schreiben, indem der Verbrauch von Ressourcen, einschließlich Energie, minimiert wird, sodass ein Gerät für Akkulaufzeit und Leistung optimiert werden kann.
Um dies zu erreichen, muss ein IHV/OEM einen WDM-Treiber implementieren, der die folgenden Funktionen unterstützt:
Zulassen, dass das System alle Flashgeräte aufzählt.
Aktivieren/Deaktivieren der Taschenlampe auf Gerätebasis.
Passen Sie ggf. die Lichtintensität (ähnlich powerPercent) pro Gerät an.
Falls zutreffend, geben Sie die Lichtfarbe pro Gerät an.
In Bezug auf die Funktionalität überlappt die obige Liste deutlich mit der von MediaCapture (z. B. FlashControl und TorchControl). Darüber hinaus wird die gleiche Blitzhardware sowohl für Leuchte als auch für Blitz während der Aufnahme verwendet. Daher wird IHVs/OEMs empfohlen, beide Arten von Vorgängen mit einem einzigen WDM-Treiber zu unterstützen, um Flash exklusiv zu steuern. Die folgende Abbildung veranschaulicht das Konzept:
Im obigen Beispiel gibt es nur eine Flash-Hardwareinstanz (siehe siehe) und wird von einem einzelnen KMDF-Flashtreiber verwaltet. Der Flash-Treiber macht zwei Geräteschnittstellen verfügbar, die jeweils für einen bestimmten Clienttyp (oder winRT-API) vorgesehen sind. Beispiel: Angenommen, die Abbildung oben:
Die WinRT MediaCapture API und der AVStream Minidriver kommunizieren immer mit dem Flash-Treiber über die GUID_DEVINTERFACE_CAMERA_FLASH Schnittstelle, während
Die WinRT Lamp API kommuniziert immer über die GUID_DEVINTERFACE_LAMP Schnittstelle mit dem Flash-Treiber.
Da die GUID_DEVINTERFACE_CAMERA_FLASH-Schnittstelle von einem herstellerspezifischen AVStream-Minidriver verwendet wird, kann ein IHV/OEM seine Funktionalität nach Belieben definieren – es gibt keine Einschränkung durch Windows.
Microsoft wird die Schnittstelle jedoch GUID_DEVINTERFACE_LAMP standardisieren, da sie von der WinRT Lamp-API verwendet werden soll. Weitere Informationen zu GUID_DEVINTERFACE_LAMP finden Sie unter GUID der Geräteschnittstellenklasse
Parallelitätsanwendungsfälle
Teilen des Blitzes zwischen Kamera- und Flashlight-Anwendungen
Ein Kamerablitz wird in der Regel als untergeordnetes Peripheriegerät für ein Aufnahmegerät betrachtet. Es soll nicht in Szenarien ohne Kamera verwendet werden, während die Aufnahme läuft. Um die Situation zu verkomplizieren, ist die Anzahl der Blitzgeräte auf einem Chassis so stark begrenzt, dass in der Praxis kein zusätzliches Blitzgerät ausschließlich für Taschenlampenzwecke vorgesehen ist.
Aus Softwareperspektive stellt die obige Perspektive eine Herausforderung dar, bei der eine Kameraanwendung und eine Blitzlichtanwendung nebeneinander existieren und zugleich auf den Blitz zugreifen können. Theoretisch kann ein Benutzer beispielsweise den LED-Zustand über eine Taschenlampen-App umschalten, während eine Kamera-Vorschau ausgeführt wird.
Da die Kamera präzise Kontrolle über den Blitz benötigt, um den Fokus und die Aufnahme zu unterstützen, kann es schwierig sein, dass der Treiber Flashanforderungen von widersprüchlichen Interessen löst und gleichzeitig die Bildqualität gewährleistet. Um dieses Problem zu beheben, wird die folgende Richtlinie auf Systemebene als Vertrag erzwungen:
Wenn eine Aufnahmesitzung zuerst gestartet wird, kann eine Taschenlampenanwendung den Blitz erst bearbeiten, wenn die Aufnahme beendet wird.
Eine Flashlight-Anwendung kann weiterhin ein Handle für den Flashtreiber abrufen, aber jeder Vorgang, der den Flash-Zustand ändert, führt zu einem sofortigen Fehler.
Wenn die Aufnahme beendet wird, sodass der AVStream-Minidriver den Flash freigibt, muss der Flash-Treiber eine PnP-Benachrichtigung bereitstellen (siehe GUID_LAMP_RESOURCES_AVAILABLE in asynchronen Benachrichtigungen), der angibt, dass die zugrunde liegende Hardware jetzt verfügbar ist. Nach Erhalt einer solchen Benachrichtigung darf eine Taschenlampenanwendung flash entsprechend programmieren.
Wenn eine Taschenlampen-App zuerst startet, ist eine Aufnahmesitzung in der Lage, die Blitzhardware ohne ausdrückliche Zustimmung zu entführen.
Durch "Hijacking" meinen wir, dass ein IHV/OEM ein beliebiges Protokoll (möglicherweise über die GUID_DEVINTERFACE_CAMERA_FLASH Schnittstelle) implementieren kann, so dass der AVStream-Minidriver den Blitz verwenden darf, als ob die Hardware überhaupt nicht verwendet wird.
Wenn eine Übernahme auftritt, muss der Flash-Treiber eine weitere PnP-Benachrichtigung senden (siehe GUID_LAMP_RESOURCES_LOST in asynchronen Benachrichtigungen), die angibt, dass der Flash unfreiwillig neu zugewiesen wurde, damit die Flashlight-Anwendung entsprechend handeln kann (z. B. durch Aktualisieren der Benutzeroberfläche).
Gemeinsame Nutzung von Flash zwischen mehreren Flashlight-Anwendungen
Wenn die Kamera nicht beteiligt ist und zwei Taschenlampenanwendungen nacheinander ausgeführt werden, sollte der Treiber den ersten Client betreuen, der die GUID_DEVINTERFACE_LAMP-Schnittstelle bereits erworben hat, und alle zusätzlichen Clients ablehnen, bis der erste Client die Schnittstelle schließlich freigibt.
Mit anderen Worten, die GUID_DEVINTERFACE_LAMP-Schnittstelle erlaubt jeweils nur einen Taschenlampenclient, und der erste Client, der die Schnittstelle erwirbt, verhindert, dass andere ausgeführt werden (Kamera/AVStream ausgeschlossen).
GUID der Geräteschnittstellenklasse
Ein IHV/OEM Flash-Treiber, der fähig ist, das Blitzlicht unabhängig von MediaCapture zu unterstützen, muss sich bei der Geräteschnittstellenklasse-GUID GUID_DEVINTERFACE_LAMP registrieren.
| Merkmal | Konfiguration |
|---|---|
| Kennung | GUID_DEVINTERFACE_LAMP |
| Klassen-GUID | {6C11E9E3-8232-4F0A-AD19-AAEC26CA5E98} |
Die GUID der Geräteschnittstellenklasse von GUID_DEVINTERFACE_CAMERA_FLASH kann von IHVs/OEMs benutzerdefiniert werden. Die GuiD der Geräteschnittstellenklasse von GUID_DEVINTERFACE_LAMP wird jedoch von Windows definiert.
Vertraglich ist ein Treiber, der die Geräteschnittstelle verfügbar macht, GUID_DEVINTERFACE_LAMP, erforderlich, um die folgenden Funktionen zu unterstützen (weitere Informationen finden Sie in den nachfolgenden Abschnitten):
IOCTL_LAMP_GET_CAPABILITIES_{WHITE|COLOR} – Ruft alle Modi (z. B. nur weiß im Vergleich zur Farbe) ab, die von der zugrunde liegenden Hardware unterstützt werden.
IOCTL_LAMP_{GET|SET}_MODE – Ruft den aktuellen Modus ab oder legt den aktuellen Modus fest.
IOCTL_LAMP_{GET|SET}_INTENSITY_{WHITE|COLOR} – Ruft die Lichtintensität ab oder legt sie fest
IOCTL_LAMP_{GET|SET}_EMITTING_LIGHT – Ruft den Lichtzustand ab oder legt den Lichtzustand fest (z. B. EIN/AUS)
Wenn ein Gerät über mehr als eine Flashhardware unterschiedlicher Typen verfügt (z. B. eine weiße LED und ein Xenon-Flash), und diese Hardware werden von verschiedenen Flashtreibern gesteuert, muss jeder Treiber dieselbe GUID_DEVINTERFACE_LAMP Schnittstelle mit einer eindeutigen Instanz-ID verfügbar machen.
Geräte-Schnittstellen-Eigenschaft
Da ein Computergerät null oder mehr Flash-Geräte auf verschiedenen Panels aufweisen kann, benötigt die WinRT-Lamp-API einen Mechanismus zum Aufzählen aller Flashhardware, sodass eine Anwendung eine bestimmte Instanz programmieren kann.
Um die Geräteenumeration zu unterstützen, muss der Blitztreiber, ähnlich wie der Kameratreiber, eine ACPI-_PLD v2-Struktur jeder GUID_DEVINTERFACE_LAMP-Schnittstelle als Eigenschaftsdaten der Schnittstelle zuordnen.
IOCTL_LAMP_GET_CAPABILITIES_WHITE
Die IOCTL_LAMP_GET_CAPABILITIES_WHITE E/A-Anforderung fragt die Funktionen des Blitzes ab, wenn das Gerät so konfiguriert ist, dass weißes Licht ausgegeben wird.
Definition
#define IOCTL_LAMP_BASE FILE_DEVICE_UNKNOWN
#define IOCTL_LAMP_GET_CAPABILITIES_WHITE \
CTL_CODE(IOCTL_LAMP_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp-AssociatedIrp.SystemBuffer> verweist auf einen Puffer vom Typ LAMP_CAPABILITIES_WHITE. Ausführliche Informationen finden Sie in Anmerkungen.
IO_STACK_LOCATION.Parameters.DeviceIoControl.OutputBufferLength ist die Länge des Puffers (in Bytes), der im Feld Irp->AssociatedIrp.SystemBuffer übergeben wird.
Ausgabeparameter
Irp-AssociatedIrp.SystemBuffer> ist mit allen Funktionen gefüllt, die von der Flash-Hardware unterstützt werden.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest. Irp->IoStatus.Information wird auf die Anzahl der Bytes festgelegt, die erforderlich sind, um den Puffer aufzunehmen.
Bemerkungen
Bei Bedarf ist ein Blitz erforderlich, dessen Treiber die GUID_DEVINTERFACE_LAMP Schnittstelle unterstützt, um weißes Licht zu unterstützen. Die Nutzlast dieser IOCTL wird wie folgt definiert:
// The output parameter type of IOCTL_LAMP_GET_CAPABILITIES_WHITE.
typedef struct LAMP_CAPABILITIES_WHITE
{
BOOLEAN IsLightIntensityAdjustable;
} LAMP_CAPABILITIES_WHITE;
Das Feld "IsLightIntensityAdjustable" gibt an, ob die Leuchtdichtestufe programmiert werden kann. Wenn dieses Feld "false" auswertet, bedeutet dies, dass das zugrunde liegende Gerät nur den Ein-/Aus-Schalter unterstützt und die Lichtintensität nicht angepasst werden kann.
IOCTL_LAMP_GET_CAPABILITIES_COLOR
Die IOCTL_LAMP_GET_CAPABILITIES_COLOR E/A-Anforderung fragt die Funktionen des Blitzes ab, wenn das Gerät so konfiguriert ist, dass Farblicht ausgegeben wird.
Definition
#define IOCTL_LAMP_GET_CAPABILITIES_COLOR \
CTL_CODE(IOCTL_LAMP_BASE, 0x0001, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp->AssociatedIrp.SystemBuffer verweist auf einen Puffer vom Typ LAMP_CAPABILITIES_COLOR. Ausführliche Informationen finden Sie in Anmerkungen.
IO_STACK_LOCATION.Parameters.DeviceIoControl.OutputBufferLength ist die Länge des Puffers (in Bytes), der im Feld Irp->AssociatedIrp.SystemBuffer übergeben wird.
Ausgabeparameter
Irp-AssociatedIrp.SystemBuffer> ist mit allen Funktionen gefüllt, die von der Flash-Hardware unterstützt werden.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest. Irp->IoStatus.Information wird auf die Anzahl der Bytes gesetzt, die erforderlich sind, um den Puffer zu halten.
Bemerkungen
Die Nutzlast dieser IOCTL wird wie folgt definiert:
// The output parameter type of IOCTL_LAMP_GET_CAPABILITIES_COLOR.
typedef struct LAMP_CAPABILITIES_COLOR
{
BOOLEAN IsSupported;
BOOLEAN IsLightIntensityAdjustable;
} LAMP_CAPABILITIES_COLOR;
Das erste Feld , IsSupported, gibt an, ob der Blitz Farblicht ausgeben kann. Wenn die Hardware kein Farblicht unterstützt, sollte der Treiber dieses Feld auf "false" festlegen.
Das zweite Feld , IsLightIntensityAdjustable, gibt an, ob die Leuchtdichtestufe programmiert werden kann. Wenn der Blitz kein Farblicht unterstützt (z. B. wenn IsSupported false ergibt), sollte ein Client den Wert von IsLightIntensityAdjustable verwerfen.
IOCTL_LAMP_GET_MODE
Die IOCTL_LAMP_GET_MODE-E/A-Anforderung fragt den Modus ab, mit dem der Blitz derzeit konfiguriert ist.
Definition
#define IOCTL_LAMP_GET_MODE \
CTL_CODE(IOCTL_LAMP_BASE, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp-AssociatedIrp.SystemBuffer> verweist auf einen Puffer vom Typ LAMP_MODE, der wie folgt definiert ist:
typedef enum LAMP_MODE
{
LAMP_MODE_WHITE = 0,
LAMP_MODE_COLOR
} LAMP_MODE;
IO_STACK_LOCATION.Parameters.DeviceIoControl.OutputBufferLength ist die Länge des Puffers (in Bytes), der im Feld Irp->AssociatedIrp.SystemBuffer übergeben wird.
Ausgabeparameter
Irp->AssociatedIrp.SystemBuffer wird mit einem Wert für LAMP_MODE gefüllt.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest. Irp->IoStatus.Information wird auf die Anzahl der Bytes festgelegt, die zum Halten eines DWORD-Werts erforderlich sind.
Wenn zum Zeitpunkt des Antrags dieser Anforderung eine MediaCapture-Sitzung Daten streamt, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über Irp->IoStatus.Status zurückgeben.
IOCTL_LAMP_SET_MODE
Die IOCTL_LAMP_SET_MODE E/A-Anforderung legt den Betriebsmodus fest, in dem der Flash arbeitet.
Definition
#define IOCTL_LAMP_SET_MODE \
CTL_CODE(IOCTL_LAMP_BASE, 0x0003, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp-AssociatedIrp.SystemBuffer> verweist auf einen Puffer vom Typ LAMP_MODE.
Ausgabeparameter
Keiner.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest.
Wenn zum Zeitpunkt des Antrags dieser Anforderung eine MediaCapture-Sitzung Daten streamt, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über Irp->IoStatus.Status zurückgeben.
IOCTL_LAMP_GET_INTENSITY_WHITE
Die IOCTL_LAMP_GET_INTENSITY_WHITE E/A-Anforderung fragt die Lichtintensität ab, wenn der Blitz so konfiguriert ist, dass weißes Licht ausgegeben wird.
Definition
#define IOCTL_LAMP_GET_INTENSITY_WHITE \
CTL_CODE(IOCTL_LAMP_BASE, 0x0004, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp->AssociatedIrp.SystemBuffer zeigt auf eine LAMP_INTENSITY_WHITE-Struktur. Ausführliche Informationen finden Sie in Anmerkungen.
IO_STACK_LOCATION.Parameters.DeviceIoControl.OutputBufferLength ist die Länge des Puffers (in Bytes), der im Feld Irp->AssociatedIrp.SystemBuffer übergeben wird.
Ausgabeparameter
Irp->AssociatedIrp.SystemBuffer wird mit Lichtintensitätsdaten gefüllt.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest.
Wenn zum Zeitpunkt des Antrags dieser Anforderung eine MediaCapture-Sitzung Daten streamt, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über Irp->IoStatus.Status zurückgeben.
Bemerkungen
Der Nutzlasttyp dieses IOCTL wird wie folgt definiert:
// The I/O parameter type of IOCTL_LAMP_{GET|SET}_INTENSITY_WHITE.
typedef struct LAMP_INTENSITY_WHITE
{
BYTE Value;
} LAMP_INTENSITY_WHITE;
Das Feld "Wert" ist die weiße Lichtintensität in Prozent zwischen 0 und 100 einschließlich.
IOCTL_LAMP_SET_INTENSITY_WHITE
Die E/A-Anforderung IOCTL_LAMP_SET_INTENSITY_WHITE stellt die Leuchte auf die angegebene Lichtintensität ein.
Definition
#define IOCTL_LAMP_SET_INTENSITY_WHITE \
CTL_CODE(IOCTL_LAMP_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp-AssociatedIrp.SystemBuffer> verweist auf eine LAMP_INTENSITY_WHITE Struktur (details finden Sie unter IOCTL_LAMP_GET_INTENSITY_WHITE ).
Ausgabeparameter
Keiner.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest.
Wenn eine MediaCapture-Sitzung Daten streamt, zum Zeitpunkt der Anforderung, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über Irp->IoStatus.Status zurückgeben.
IOCTL_LAMP_GET_INTENSITY_COLOR
Die IOCTL_LAMP_GET_INTENSITY_COLOR E/A-Anforderung fragt die Lichtintensität ab, wenn der Blitz so konfiguriert ist, dass Farblicht ausgegeben wird.
Definition
#define IOCTL_LAMP_GET_INTENSITY_COLOR \
CTL_CODE(IOCTL_LAMP_BASE, 0x0006, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp->AssociatedIrp.SystemBuffer verweist auf eine LAMP_INTENSITY_COLOR-Struktur. Ausführliche Informationen finden Sie in Anmerkungen.
IO_STACK_LOCATION.Parameters.DeviceIoControl.OutputBufferLength ist die Länge des Puffers (in Bytes), der im Feld Irp->AssociatedIrp.SystemBuffer übergeben wird.
Ausgabeparameter
Irp->AssociatedIrp.SystemBuffer wird mit Lichtintensitätsdaten gefüllt.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest.
Wenn eine MediaCapture-Sitzung zu dem Zeitpunkt, an dem diese Anforderung gestellt wird, Daten streamt, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über Irp-IoStatus.Status> zurückgeben.
Bemerkungen
Der Nutzlasttyp dieses IOCTL wird wie folgt definiert:
// The I/O parameter type of IOCTL_LAMP_{GET|SET}_INTENSITY_COLOR.
typedef struct LAMP_INTENSITY_COLOR
{
BYTE Red; // Red light intensity in percentage (0-100)
BYTE Green; // Green light intensity in percentage (0-100)
BYTE Blue; // Blue light intensity in percentage (0-100)
} LAMP_INTENSITY_COLOR;
IOCTL_LAMP_SET_INTENSITY_COLOR
Die IOCTL_LAMP_SET_INTENSITY_COLOR E/A-Anforderung legt den Blitz auf die angegebene Lichtintensität fest.
Definition
#define IOCTL_LAMP_SET_INTENSITY_COLOR \
CTL_CODE(IOCTL_LAMP_BASE, 0x0007, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp-AssociatedIrp.SystemBuffer> verweist auf eine LAMP_INTENSITY_COLOR Struktur (details finden Sie unter IOCTL_LAMP_GET_INTENSITY_COLOR ).
Ausgabeparameter
Keiner.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest.
Wenn eine MediaCapture-Sitzung zum Zeitpunkt der Anforderung Daten streamt, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über >Irp-IoStatus.Status zurückgeben.
IOCTL_LAMP_GET_EMITTING_LIGHT
Die IOCTL_LAMP_GET_EMITTING_LIGHT E/A-Anforderung fragt ab, ob die (Blitz)-Beleuchtung aktiviert ist.
Definition
#define IOCTL_LAMP_GET_EMITTING_LIGHT
CTL_CODE(IOCTL_LAMP_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp-AssociatedIrp.SystemBuffer> verweist auf einen Puffer vom Typ BOOLEAN.
IO_STACK_LOCATION.Parameters.DeviceIoControl.OutputBufferLength ist die Länge des Puffers (in Bytes), der im Feld Irp->AssociatedIrp.SystemBuffer übergeben wird.
Ausgabeparameter
Irp-AssociatedIrp.SystemBuffer> ist mit dem Blitzzustand mit TRUE gefüllt, d. h. der Blitz ist eingeschaltet (z. B. emittierendes Licht); Andernfalls FALSE.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest. Irp->IoStatus.Information wird auf die Anzahl der Bytes festgelegt, die zum Halten eines DWORD-Werts erforderlich sind.
Wenn eine MediaCapture-Sitzung Daten zum Zeitpunkt streamt, an dem diese Anforderung erfolgt, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über Irp->IoStatus.Status zurückgeben.
IOCTL_LAMP_SET_EMITTING_LIGHT
Die IOCTL_LAMP_SET_EMITTING_LIGHT E/A-Anforderung aktiviert/deaktiviert das Licht (Blitzlicht).
Definition
#define IOCTL_LAMP_SET_EMITTING_LIGHT
CTL_CODE(IOCTL_LAMP_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
Eingabeparameter
Irp-AssociatedIrp.SystemBuffer> verweist auf einen Puffer vom Typ BOOLEAN mit WAHR, der ON angibt; Andernfalls FALSE.
Ausgabeparameter
Keiner.
E/A-Statusblock
Der Treiber legt "Irp-IoStatus.Status>" auf STATUS_SUCCESS oder den entsprechenden Fehlerstatus fest.
Wenn zum Zeitpunkt des Antrags dieser Anforderung eine MediaCapture-Sitzung Daten streamt, sollte der Treiber einen Fehler (STATUS_RESOURCE_IN_USE) über Irp->IoStatus.Status zurückgeben.
Asynchrone Benachrichtigungen
Wie in Concurrency Use Cases beschrieben, muss der Flash-Treiber PnP-Benachrichtigungen senden, um die Ressourcenverfügbarkeit zu melden. Dies kann durch Aufrufen von IoReportTargetDeviceChange (oder IoReportTargetDeviceChangeAsynchronous) mit den folgenden GUIDs erfolgen, je nach Szenario:
Die Flash-Ressource wurde gelöscht, da eine Aufnahmesitzung (oder eine andere Flashlight-Anwendung) gestartet wird:
Merkmal Konfiguration Kennung GUID_LAMP_RESOURCES_LOST Klassen-GUID {F770E98C-4403-48C9-B1D2-4EEC3302E41F} Die Flash-Ressource ist jetzt verfügbar:
Merkmal Konfiguration Kennung GUID_LAMP_RESOURCES_AVAILABLE Klassen-GUID {185FE7CE-2616-481B-9094-20BB893ACD81}