WIA Minidriver
Anwendungen sehen Windows Image Acquisition (WIA)-Geräte als hierarchische Struktur von IWiaItem- oder IWiaItem2-Objekten , wobei das Stammelement das Gerät selbst darstellt. WIA-Geräte können von mehreren Anwendungen gleichzeitig verwendet werden. Es ist daher erforderlich, dass die Ansicht jeder Anwendung eines IWiaItem- oder IWiaItem2-Objekts von den Ansichten einer anderen Anwendung unabhängig ist. Dies wird durch zwei verschiedene Elementobjekte erreicht. Der Treiber erstellt die Treiberelementstruktur von IWiaDrvItem-Schnittstellenobjekten , die auch als Treiberelemente bezeichnet werden, mithilfe der WIA-Treiberdienstemethoden. Dabei handelt es sich um globale Objekte, die der Treiber verwendet, um die internen Elemente jedes Treibers darzustellen. Wenn eine Anwendung ein IWiaItem- oder IWiaItem2-Objekt (auch als Anwendungselement bezeichnet) erstellt, wird dieses Objekt mit der entsprechenden IWiaDrvItem-Schnittstelle des Treibers in der Treiberelementstruktur verknüpft. Eine Verweisanzahl wird für das IWiaDrvItem-Interface-Objekt gemäß den folgenden Regeln beibehalten:
- Wenn ein Treiber ein IWiaDrvItem Interface-Objekt zur Treiberelementstruktur hinzufügt, wird die Verweisanzahl des IWiaDrvItem Interface-Objekts inkrementiert. Dies geschieht in der Regel während IWiaMiniDrv::d rvInitializeWia oder wenn ein WIA_CMD_SYNCHRONIZE-Befehl verarbeitet wird.
- Wenn ein Treiber ein IWiaDrvItem Interface-Objekt aus der Treiberelementstruktur entfernt, wird die Verweisanzahl des IWiaDrvItem Interface-Objekts dekrementiert, und das IWiaDrvItem Interface-Objekt wird markiert, sodass es nicht mehr auf das Gerät zugreifen kann. Dies geschieht in der Regel, wenn ein Gerät getrennt oder ein Element gelöscht wird. Anwendungen können weiterhin Eigenschaften aus einem IWiaItem- oder IWiaItem2-Objekt lesen, auch wenn das entsprechende IWiaDrvItem Interface-Objekt aus der Treiberelementstruktur entfernt wurde.
- Wenn ein IWiaItem- oder IWiaItem2-Objekt erstellt wird, wird es mit einem entsprechenden IWiaDrvItem Interface-Objekt verknüpft. Die Verweisanzahl des IWiaDrvItem-Interface-Objekts wird erhöht.
- Wenn ein IWiaItem- oder IWiaItem2-Objekt freigegeben wird, wird der Link zum entsprechenden IWiaDrvItem Interface-Objekt getrennt, und die Verweisanzahl des IWiaDrvItem Interface-Objekts wird verringert.
- Wenn die Verweisanzahl eines IWiaDrvItem-Interface-Objekts auf 0 0 steigt, wird das IWiaDrvItem Interface-Objekt gelöscht. Dies gilt für alle IWiaDrvItem Interface-Objekte , einschließlich des Stammelements. Die Verweisanzahl eines IWiaDrvItem Interface-Objekts geht nur dann auf 0, wenn keine Anwendungselemente darauf verweisen und es nicht mehr mit der Treiberelementstruktur verknüpft ist.
Mit diesem Verweiszählungsschema können viele IWiaItem- oder IWiaItem2-Objekte ohne Störungen mit einer IWiaDrvItem-Schnittstelle verknüpft werden. Da jedes IWiaItem oder IWiaItem2 einen eigenen Eigenschaftsspeicher enthält, kann eine Anwendung auch nach dem Löschen eines Elements weiterhin Elementeigenschaften lesen, aber kein Vorgang, der Zugriff auf das Gerät erfordert, ist erfolgreich. Da Elementeigenschaften im IWiaItem- oder IWiaItem2-Objekt gespeichert werden, muss der Treiber die Eigenschaften des IWiaItem- oder IWiaItem2-Objekts vor einer Datenübertragung auf das Gerät festlegen.