Go to the documentation of this file.00001 #pragma once
00002
00003 #include <ntddk.h>
00004 #include <ks.h>
00005
00006 typedef struct
00007 {
00008 KoCreateObjectHandler CreateObjectHandler;
00009 }KO_DRIVER_EXTENSION, *PKO_DRIVER_EXTENSION;
00010
00011 typedef struct
00012 {
00013 const KSDEVICE_DESCRIPTOR *Descriptor;
00014 }KS_DRIVER_EXTENSION, *PKS_DRIVER_EXTENSION;
00015
00016 typedef struct
00017 {
00018 KSOBJECT_HEADER ObjectHeader;
00019 KSOBJECT_CREATE_ITEM CreateItem;
00020 }KO_OBJECT_HEADER, *PKO_OBJECT_HEADER;
00021
00022
00023 typedef struct
00024 {
00025 KSDISPATCH_TABLE DispatchTable;
00026 KSOBJECTTYPE Type;
00027
00028 LONG ItemListCount;
00029 LIST_ENTRY ItemList;
00030
00031 UNICODE_STRING ObjectClass;
00032 PUNKNOWN Unknown;
00033 PVOID ObjectType;
00034
00035 PDEVICE_OBJECT TargetDevice;
00036 LIST_ENTRY TargetDeviceListEntry;
00037
00038 PDEVICE_OBJECT ParentDeviceObject;
00039
00040 PFNKSCONTEXT_DISPATCH PowerDispatch;
00041 PVOID PowerContext;
00042 LIST_ENTRY PowerDispatchEntry;
00043 PKSOBJECT_CREATE_ITEM OriginalCreateItem;
00044 ACCESS_MASK AccessMask;
00045
00046 }KSIOBJECT_HEADER, *PKSIOBJECT_HEADER;
00047
00048 typedef struct
00049 {
00050 LIST_ENTRY Entry;
00051 PKSOBJECT_CREATE_ITEM CreateItem;
00052 PFNKSITEMFREECALLBACK ItemFreeCallback;
00053 LONG ReferenceCount;
00054 LIST_ENTRY ObjectItemList;
00055 }CREATE_ITEM_ENTRY, *PCREATE_ITEM_ENTRY;
00056
00057 typedef struct
00058 {
00059 KSOBJECTTYPE Type;
00060 PKSDEVICE KsDevice;
00061 PRKMUTEX ControlMutex;
00062 LIST_ENTRY EventList;
00063 KSPIN_LOCK EventListLock;
00064 PUNKNOWN ClientAggregate;
00065 PUNKNOWN OuterUnknown;
00066 union
00067 {
00068 PKSDEVICE KsDevice;
00069 PKSFILTERFACTORY KsFilterFactory;
00070 PKSFILTER KsFilter;
00071 }Parent;
00072
00073 union
00074 {
00075 PKSFILTERFACTORY FilterFactory;
00076 PKSFILTER Filter;
00077 PKSPIN Pin;
00078 }Next;
00079
00080 union
00081 {
00082 PKSFILTERFACTORY FilterFactory;
00083 PKSFILTER Filter;
00084 }FirstChild;
00085
00086 }KSBASIC_HEADER, *PKSBASIC_HEADER;
00087
00088 typedef struct
00089 {
00090 KSBASIC_HEADER BasicHeader;
00091 KSDEVICE KsDevice;
00092
00093 LONG ref;
00094 ERESOURCE SecurityLock;
00095
00096 LONG ItemListCount;
00097 LIST_ENTRY ItemList;
00098
00099 ULONG DeviceIndex;
00100 PDEVICE_OBJECT PnpDeviceObject;
00101 PDEVICE_OBJECT BaseDevice;
00102
00103 KSTARGET_STATE TargetState;
00104 LIST_ENTRY TargetDeviceList;
00105
00106 KMUTEX DeviceMutex;
00107 KMUTEX BagMutex;
00108
00109 LIST_ENTRY PowerDispatchList;
00110 LIST_ENTRY ObjectBags;
00111
00112 PADAPTER_OBJECT AdapterObject;
00113 ULONG MaxMappingsByteCount;
00114 ULONG MappingTableStride;
00115
00116 }KSIDEVICE_HEADER, *PKSIDEVICE_HEADER;
00117
00118 typedef struct
00119 {
00120 PKSIDEVICE_HEADER DeviceHeader;
00121
00122 }DEVICE_EXTENSION, *PDEVICE_EXTENSION;
00123
00124 typedef struct
00125 {
00126 LIST_ENTRY Entry;
00127 UNICODE_STRING SymbolicLink;
00128 CLSID DeviceInterfaceClass;
00129 }SYMBOLIC_LINK_ENTRY, *PSYMBOLIC_LINK_ENTRY;
00130
00131 typedef struct
00132 {
00133 PKSIDEVICE_HEADER DeviceHeader;
00134 PIO_WORKITEM WorkItem;
00135 }PNP_POSTSTART_CONTEXT, *PPNP_POSTSTART_CONTEXT;
00136
00137 typedef struct
00138 {
00139 PLIST_ENTRY List;
00140 PFILE_OBJECT FileObject;
00141 PKSEVENT_ENTRY EventEntry;
00142 PIRP Irp;
00143 }KSEVENT_CTX, *PKSEVENT_CTX;
00144
00145 typedef BOOLEAN (NTAPI *PKSEVENT_SYNCHRONIZED_ROUTINE)(PKSEVENT_CTX Context);
00146
00147 struct __BUS_ENUM_DEVICE_EXTENSION__;
00148 struct __BUS_DEVICE_ENTRY__;
00149
00150 typedef struct
00151 {
00152 LIST_ENTRY Entry;
00153 ULONG IsBus;
00154 union
00155 {
00156 PDEVICE_OBJECT DeviceObject;
00157 ULONG DeviceReferenceCount;
00158 };
00159 union
00160 {
00161 struct __BUS_DEVICE_ENTRY__* DeviceEntry;
00162 ULONG Dummy1;
00163 };
00164 struct __BUS_ENUM_DEVICE_EXTENSION__ *BusDeviceExtension;
00165 ULONG DeviceObjectReferenceCount;
00166 }COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
00167
00168 typedef struct
00169 {
00170 PCOMMON_DEVICE_EXTENSION Ext;
00171 }DEV_EXTENSION, *PDEV_EXTENSION;
00172
00173 typedef struct
00174 {
00175 LIST_ENTRY Entry;
00176 GUID InterfaceGuid;
00177 UNICODE_STRING SymbolicLink;
00178 }BUS_INSTANCE_ENTRY, *PBUS_INSTANCE_ENTRY;
00179
00180
00181
00182 typedef enum
00183 {
00184 NotStarted = 0,
00185 Started,
00186 StopPending,
00187 Stopped,
00188 RemovePending,
00189 SurpriseRemovePending,
00190 Deleted
00191 }DEVICE_STATE;
00192
00193
00194 typedef struct __BUS_DEVICE_ENTRY__
00195 {
00196 LIST_ENTRY Entry;
00197 LIST_ENTRY DeviceInterfaceList;
00198 LIST_ENTRY IrpPendingList;
00199 PDEVICE_OBJECT PDO;
00200 DEVICE_STATE DeviceState;
00201 GUID DeviceGuid;
00202 LPWSTR PDODeviceName;
00203 LPWSTR DeviceName;
00204 LPWSTR BusId;
00205 LARGE_INTEGER TimeCreated;
00206 LARGE_INTEGER TimeExpired;
00207 LPWSTR Instance;
00208 }BUS_DEVICE_ENTRY, *PBUS_DEVICE_ENTRY;
00209
00210 typedef struct __BUS_ENUM_DEVICE_EXTENSION__
00211 {
00212 COMMON_DEVICE_EXTENSION Common;
00213 KSPIN_LOCK Lock;
00214 KEVENT Event;
00215 UNICODE_STRING DeviceInterfaceLink;
00216 PDEVICE_OBJECT PhysicalDeviceObject;
00217 PDEVICE_OBJECT PnpDeviceObject;
00218 PDEVICE_OBJECT BusDeviceObject;
00219 ULONG PdoCreated;
00220 KTIMER Timer;
00221 KDPC Dpc;
00222 WORK_QUEUE_ITEM WorkItem;
00223 ULONG DeviceAttached;
00224 UNICODE_STRING ServicePath;
00225
00226 WCHAR BusIdentifier[1];
00227 }BUS_ENUM_DEVICE_EXTENSION, *PBUS_ENUM_DEVICE_EXTENSION;
00228
00229 typedef struct
00230 {
00231 PIRP Irp;
00232 PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension;
00233 KEVENT Event;
00234 NTSTATUS Status;
00235 WORK_QUEUE_ITEM WorkItem;
00236 }BUS_INSTALL_ENUM_CONTEXT, *PBUS_INSTALL_ENUM_CONTEXT;
00237
00238 typedef struct
00239 {
00240 PUCHAR FilterData;
00241 ULONG FilterLength;
00242 ULONG FilterOffset;
00243
00244 PUCHAR DataCache;
00245 ULONG DataLength;
00246 ULONG DataOffset;
00247
00248 }KSPCACHE_DESCRIPTOR, *PKSPCACHE_DESCRIPTOR;
00249
00250 typedef struct
00251 {
00252 DWORD dwVersion;
00253 DWORD dwMerit;
00254 DWORD dwPins;
00255 DWORD dwUnused;
00256 }KSPCACHE_FILTER_HEADER, *PKSPCACHE_FILTER_HEADER;
00257
00258 typedef struct
00259 {
00260 ULONG Signature;
00261 ULONG Flags;
00262 ULONG Instances;
00263 ULONG MediaTypes;
00264 ULONG Mediums;
00265 DWORD Category;
00266 }KSPCACHE_PIN_HEADER, *PKSPCACHE_PIN_HEADER;
00267
00268
00269 typedef struct
00270 {
00271 ULONG Signature;
00272 ULONG dwUnused;
00273 ULONG OffsetMajor;
00274 ULONG OffsetMinor;
00275 }KSPCACHE_DATARANGE, *PKSPCACHE_DATARANGE;
00276
00277
00278 typedef struct
00279 {
00280 CLSID Medium;
00281 ULONG dw1;
00282 ULONG dw2;
00283 }KSPCACHE_MEDIUM;
00284