ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

interfaces.hpp
Go to the documentation of this file.
00001 #ifndef INTERFACES_H__
00002 #define INTERFACES_H__
00003 
00004 DEFINE_GUID(IID_IIrpTarget,        0xB4C90A60, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
00005 DEFINE_GUID(IID_ISubdevice,        0xB4C90A61, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
00006 DEFINE_GUID(IID_IIrpTargetFactory, 0xB4C90A62, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
00007 
00008 
00009 /*****************************************************************************
00010  * IIrpTarget
00011  *****************************************************************************
00012  */
00013 
00014 #define IMP_IIrpTarget                                     \
00015     STDMETHODIMP_(NTSTATUS) NewIrpTarget(THIS_             \
00016         OUT struct IIrpTarget **OutTarget,                 \
00017         IN PCWSTR Name,                                    \
00018         IN PUNKNOWN Unknown,                               \
00019         IN POOL_TYPE PoolType,                             \
00020         IN PDEVICE_OBJECT DeviceObject,                    \
00021         IN PIRP Irp,                                       \
00022         IN KSOBJECT_CREATE *CreateObject);                 \
00023                                                            \
00024     STDMETHODIMP_(NTSTATUS) DeviceIoControl(THIS_          \
00025         IN PDEVICE_OBJECT DeviceObject,                    \
00026         IN PIRP Irp);                                      \
00027                                                            \
00028     STDMETHODIMP_(NTSTATUS) Read(THIS_                     \
00029         IN PDEVICE_OBJECT DeviceObject,                    \
00030         IN PIRP Irp);                                      \
00031                                                            \
00032     STDMETHODIMP_(NTSTATUS) Write(THIS_                    \
00033         IN PDEVICE_OBJECT DeviceObject,                    \
00034         IN PIRP Irp);                                      \
00035                                                            \
00036     STDMETHODIMP_(NTSTATUS) Flush(THIS_                    \
00037         IN PDEVICE_OBJECT DeviceObject,                    \
00038         IN PIRP Irp);                                      \
00039                                                            \
00040     STDMETHODIMP_(NTSTATUS) Close(THIS_                    \
00041         IN PDEVICE_OBJECT DeviceObject,                    \
00042         IN PIRP Irp);                                      \
00043                                                            \
00044     STDMETHODIMP_(NTSTATUS) QuerySecurity(THIS_            \
00045         IN PDEVICE_OBJECT DeviceObject,                    \
00046         IN PIRP Irp);                                      \
00047                                                            \
00048     STDMETHODIMP_(NTSTATUS) SetSecurity(THIS_              \
00049         IN PDEVICE_OBJECT DeviceObject,                    \
00050         IN PIRP Irp);                                      \
00051                                                            \
00052     STDMETHODIMP_(BOOLEAN) FastDeviceIoControl(THIS_       \
00053         IN PFILE_OBJECT FileObject,                        \
00054         IN BOOLEAN Wait,                                   \
00055         IN PVOID InputBuffer,                              \
00056         IN ULONG InputBufferLength,                        \
00057         OUT PVOID OutputBuffer,                            \
00058         IN ULONG OutputBufferLength,                       \
00059         IN ULONG IoControlCode,                            \
00060         OUT PIO_STATUS_BLOCK StatusBlock,                  \
00061         IN PDEVICE_OBJECT DeviceObject);                   \
00062                                                            \
00063     STDMETHODIMP_(BOOLEAN) FastRead(THIS_                  \
00064         IN PFILE_OBJECT FileObject,                        \
00065         IN PLARGE_INTEGER FileOffset,                      \
00066         IN ULONG Length,                                   \
00067         IN BOOLEAN Wait,                                   \
00068         IN ULONG LockKey,                                  \
00069         IN PVOID Buffer,                                   \
00070         OUT PIO_STATUS_BLOCK StatusBlock,                  \
00071         IN PDEVICE_OBJECT DeviceObject);                   \
00072                                                            \
00073     STDMETHODIMP_(BOOLEAN) FastWrite(THIS_                 \
00074         IN PFILE_OBJECT FileObject,                        \
00075         IN PLARGE_INTEGER FileOffset,                      \
00076         IN ULONG Length,                                   \
00077         IN BOOLEAN Wait,                                   \
00078         IN ULONG LockKey,                                  \
00079         IN PVOID Buffer,                                   \
00080         OUT PIO_STATUS_BLOCK StatusBlock,                  \
00081         IN PDEVICE_OBJECT DeviceObject)
00082 
00083 #define DEFINE_ABSTRACT_IRPTARGET()                        \
00084     STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_               \
00085         OUT struct IIrpTarget **OutTarget,                 \
00086         IN PCWSTR Name,                                    \
00087         IN PUNKNOWN Unknown,                               \
00088         IN POOL_TYPE PoolType,                             \
00089         IN PDEVICE_OBJECT DeviceObject,                    \
00090         IN PIRP Irp,                                       \
00091         IN KSOBJECT_CREATE *CreateObject) PURE;            \
00092                                                            \
00093     STDMETHOD_(NTSTATUS, DeviceIoControl)(THIS_            \
00094         IN PDEVICE_OBJECT DeviceObject,                    \
00095         IN PIRP Irp)PURE;                                  \
00096                                                            \
00097     STDMETHOD_(NTSTATUS, Read)(THIS_                       \
00098         IN PDEVICE_OBJECT DeviceObject,                    \
00099         IN PIRP Irp)PURE;                                  \
00100                                                            \
00101     STDMETHOD_(NTSTATUS, Write)(THIS_                      \
00102         IN PDEVICE_OBJECT DeviceObject,                    \
00103         IN PIRP Irp)PURE;                                  \
00104                                                            \
00105     STDMETHOD_(NTSTATUS, Flush)(THIS_                      \
00106         IN PDEVICE_OBJECT DeviceObject,                    \
00107         IN PIRP Irp)PURE;                                  \
00108                                                            \
00109     STDMETHOD_(NTSTATUS, Close)(                           \
00110         IN PDEVICE_OBJECT DeviceObject,                    \
00111         IN PIRP Irp)PURE;                                  \
00112                                                            \
00113     STDMETHOD_(NTSTATUS, QuerySecurity)(THIS_              \
00114         IN PDEVICE_OBJECT DeviceObject,                    \
00115         IN PIRP Irp)PURE;                                  \
00116                                                            \
00117     STDMETHOD_(NTSTATUS, SetSecurity)(THIS_                \
00118         IN PDEVICE_OBJECT DeviceObject,                    \
00119         IN PIRP Irp)PURE;                                  \
00120                                                            \
00121     STDMETHOD_(BOOLEAN, FastDeviceIoControl)(THIS_         \
00122         IN PFILE_OBJECT FileObject,                        \
00123         IN BOOLEAN Wait,                                   \
00124         IN PVOID InputBuffer,                              \
00125         IN ULONG InputBufferLength,                        \
00126         OUT PVOID OutputBuffer,                            \
00127         IN ULONG OutputBufferLength,                       \
00128         IN ULONG IoControlCode,                            \
00129         OUT PIO_STATUS_BLOCK StatusBlock,                  \
00130         IN PDEVICE_OBJECT DeviceObject)PURE;               \
00131                                                            \
00132     STDMETHOD_(BOOLEAN, FastRead)(THIS_                    \
00133         IN PFILE_OBJECT FileObject,                        \
00134         IN PLARGE_INTEGER FileOffset,                      \
00135         IN ULONG Length,                                   \
00136         IN BOOLEAN Wait,                                   \
00137         IN ULONG LockKey,                                  \
00138         IN PVOID Buffer,                                   \
00139         OUT PIO_STATUS_BLOCK StatusBlock,                  \
00140         IN PDEVICE_OBJECT DeviceObject)PURE;               \
00141                                                            \
00142     STDMETHOD_(BOOLEAN, FastWrite)(THIS_                   \
00143         IN PFILE_OBJECT FileObject,                        \
00144         IN PLARGE_INTEGER FileOffset,                      \
00145         IN ULONG Length,                                   \
00146         IN BOOLEAN Wait,                                   \
00147         IN ULONG LockKey,                                  \
00148         IN PVOID Buffer,                                   \
00149         OUT PIO_STATUS_BLOCK StatusBlock,                  \
00150         IN PDEVICE_OBJECT DeviceObject)PURE;
00151 
00152 
00153 
00154 #undef INTERFACE
00155 #define INTERFACE IIrpTarget
00156 
00157 DECLARE_INTERFACE_(IIrpTarget, IUnknown)
00158 {
00159     DEFINE_ABSTRACT_UNKNOWN()
00160 
00161     DEFINE_ABSTRACT_IRPTARGET()
00162 };
00163 
00164 typedef IIrpTarget *PIRPTARGET;
00165 
00166 /*****************************************************************************
00167  * ISubdevice
00168  *****************************************************************************
00169  */
00170 
00171 struct IIrpTargetFactory;
00172 
00173 typedef struct
00174 {
00175     LIST_ENTRY Entry;
00176     UNICODE_STRING SymbolicLink;
00177 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
00178 
00179 typedef struct
00180 {
00181     LIST_ENTRY Entry;
00182     ULONG FromPin;
00183     KSPIN_PHYSICALCONNECTION Connection;
00184 }PHYSICAL_CONNECTION_ENTRY, *PPHYSICAL_CONNECTION_ENTRY;
00185 
00186 typedef struct
00187 {
00188     ULONG MaxGlobalInstanceCount;
00189     ULONG MaxFilterInstanceCount;
00190     ULONG MinFilterInstanceCount;
00191     ULONG CurrentPinInstanceCount;
00192 
00193 }PIN_INSTANCE_INFO, *PPIN_INSTANCE_INFO;
00194 
00195 
00196 typedef struct
00197 {
00198     ULONG PinDescriptorCount;
00199     ULONG PinDescriptorSize;
00200     KSPIN_DESCRIPTOR * KsPinDescriptor;
00201     PIN_INSTANCE_INFO * Instances;
00202 }KSPIN_FACTORY;
00203 
00204 typedef struct
00205 {
00206     ULONG InterfaceCount;
00207     GUID *Interfaces;
00208     KSPIN_FACTORY Factory;
00209     ULONG FilterPropertySetCount;
00210     PKSPROPERTY_SET FilterPropertySet;
00211 
00212     ULONG EventSetCount;
00213     PKSEVENT_SET EventSet;
00214     PLIST_ENTRY EventList;
00215     PKSPIN_LOCK EventListLock;
00216 
00217     PPCFILTER_DESCRIPTOR DeviceDescriptor;
00218     KSTOPOLOGY*  Topology;
00219     LIST_ENTRY SymbolicLinkList;
00220     LIST_ENTRY PhysicalConnectionList;
00221     UNICODE_STRING RefString;
00222     PUNKNOWN UnknownMiniport;
00223     PUNKNOWN UnknownStream;
00224     PVOID PortPin;
00225 }SUBDEVICE_DESCRIPTOR, *PSUBDEVICE_DESCRIPTOR;
00226 
00227 #undef INTERFACE
00228 #define INTERFACE ISubdevice
00229 
00230 #define DEFINE_ABSTRACT_ISUBDEVICE()                          \
00231     STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_                  \
00232         OUT IIrpTarget **OutTarget,                           \
00233         IN PCWSTR Name,                                       \
00234         IN PUNKNOWN Unknown,                                  \
00235         IN POOL_TYPE PoolType,                                \
00236         IN PDEVICE_OBJECT DeviceObject,                       \
00237         IN PIRP Irp,                                          \
00238         IN KSOBJECT_CREATE *CreateObject) PURE;               \
00239                                                               \
00240     STDMETHOD_(NTSTATUS, ReleaseChildren)(THIS) PURE;         \
00241                                                               \
00242     STDMETHOD_(NTSTATUS, GetDescriptor)(THIS_                 \
00243         IN SUBDEVICE_DESCRIPTOR **) PURE;                     \
00244                                                               \
00245     STDMETHOD_(NTSTATUS, DataRangeIntersection)(THIS_         \
00246         IN  ULONG PinId,                                      \
00247         IN  PKSDATARANGE DataRange,                           \
00248         IN  PKSDATARANGE MatchingDataRange,                   \
00249         IN  ULONG OutputBufferLength,                         \
00250         OUT PVOID ResultantFormat OPTIONAL,                   \
00251         OUT PULONG ResultantFormatLength) PURE;               \
00252                                                               \
00253     STDMETHOD_(NTSTATUS, PowerChangeNotify)(THIS_             \
00254         IN POWER_STATE PowerState) PURE;                      \
00255                                                               \
00256     STDMETHOD_(NTSTATUS, PinCount)(THIS_                      \
00257         IN ULONG  PinId,                                      \
00258         IN OUT PULONG  FilterNecessary,                       \
00259         IN OUT PULONG  FilterCurrent,                         \
00260         IN OUT PULONG  FilterPossible,                        \
00261         IN OUT PULONG  GlobalCurrent,                         \
00262         IN OUT PULONG  GlobalPossible)PURE;
00263 
00264 
00265 
00266 #define IMP_ISubdevice                                        \
00267     STDMETHODIMP_(NTSTATUS) NewIrpTarget(                     \
00268         OUT IIrpTarget **OutTarget,                           \
00269         IN PCWSTR Name,                                       \
00270         IN PUNKNOWN Unknown,                                  \
00271         IN POOL_TYPE PoolType,                                \
00272         IN PDEVICE_OBJECT DeviceObject,                       \
00273         IN PIRP Irp,                                          \
00274         IN KSOBJECT_CREATE *CreateObject);                    \
00275                                                               \
00276     STDMETHODIMP_(NTSTATUS) ReleaseChildren(THIS);            \
00277                                                               \
00278     STDMETHODIMP_(NTSTATUS) GetDescriptor(THIS_               \
00279         IN SUBDEVICE_DESCRIPTOR **);                          \
00280                                                               \
00281     STDMETHODIMP_(NTSTATUS) DataRangeIntersection(            \
00282         IN  ULONG PinId,                                      \
00283         IN  PKSDATARANGE DataRange,                           \
00284         IN  PKSDATARANGE MatchingDataRange,                   \
00285         IN  ULONG OutputBufferLength,                         \
00286         OUT PVOID ResultantFormat OPTIONAL,                   \
00287         OUT PULONG ResultantFormatLength);                    \
00288                                                               \
00289     STDMETHODIMP_(NTSTATUS) PowerChangeNotify(                \
00290         IN POWER_STATE PowerState);                           \
00291                                                               \
00292     STDMETHODIMP_(NTSTATUS) PinCount(                         \
00293         IN ULONG  PinId,                                      \
00294         IN OUT PULONG  FilterNecessary,                       \
00295         IN OUT PULONG  FilterCurrent,                         \
00296         IN OUT PULONG  FilterPossible,                        \
00297         IN OUT PULONG  GlobalCurrent,                         \
00298         IN OUT PULONG  GlobalPossible)
00299 
00300 
00301 DECLARE_INTERFACE_(ISubdevice, IUnknown)
00302 {
00303     DEFINE_ABSTRACT_UNKNOWN()
00304     DEFINE_ABSTRACT_ISUBDEVICE()
00305 };
00306 
00307 typedef ISubdevice *PSUBDEVICE;
00308 
00309 /*****************************************************************************
00310  * IIrpQueue
00311  *****************************************************************************
00312  */
00313 
00314 #undef INTERFACE
00315 #define INTERFACE IIrpQueue
00316 
00317 DECLARE_INTERFACE_(IIrpQueue, IUnknown)
00318 {
00319     DEFINE_ABSTRACT_UNKNOWN()
00320 
00321     STDMETHOD_(NTSTATUS, Init)(THIS_
00322         IN PKSPIN_CONNECT ConnectDetails,
00323         IN PKSPIN_DESCRIPTOR Descriptor,
00324         IN ULONG FrameSize,
00325         IN ULONG Alignment,
00326         IN ULONG TagSupportEnabled) PURE;
00327 
00328     STDMETHOD_(NTSTATUS, AddMapping)(THIS_
00329         IN PIRP Irp,
00330         OUT PULONG Data) PURE;
00331 
00332     STDMETHOD_(NTSTATUS, GetMapping)(THIS_
00333         OUT PUCHAR * Buffer,
00334         OUT PULONG BufferSize) PURE;
00335 
00336     STDMETHOD_(VOID, UpdateMapping)(THIS_
00337         IN ULONG BytesWritten) PURE;
00338 
00339     STDMETHOD_(ULONG, NumData)(THIS) PURE;
00340 
00341     STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
00342 
00343     STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
00344         IN PVOID Tag,
00345         OUT PPHYSICAL_ADDRESS  PhysicalAddress,
00346         OUT PVOID  *VirtualAddress,
00347         OUT PULONG  ByteCount,
00348         OUT PULONG  Flags) PURE;
00349 
00350     STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
00351         IN PVOID Tag) PURE;
00352 
00353     STDMETHOD_(BOOLEAN, HasLastMappingFailed)(THIS) PURE;
00354     STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE;
00355 
00356     STDMETHOD_(BOOLEAN, GetAcquiredTagRange)(THIS_
00357         IN PVOID * FirstTag,
00358         IN PVOID * LastTag) PURE;
00359 
00360 };
00361 
00362 
00363 #define IMP_IIrpQueue                                  \
00364     STDMETHODIMP_(NTSTATUS) Init(THIS_                 \
00365         IN PKSPIN_CONNECT ConnectDetails,              \
00366         IN PKSPIN_DESCRIPTOR Descriptor,               \
00367         IN ULONG FrameSize,                            \
00368         IN ULONG Alignment,                            \
00369         IN ULONG TagSupportEnabled);                   \
00370                                                        \
00371     STDMETHODIMP_(NTSTATUS) AddMapping(THIS_           \
00372         IN PIRP Irp,                                   \
00373         OUT PULONG Data);                              \
00374                                                        \
00375     STDMETHODIMP_(NTSTATUS) GetMapping(THIS_           \
00376         OUT PUCHAR * Buffer,                           \
00377         OUT PULONG BufferSize);                        \
00378                                                        \
00379     STDMETHODIMP_(VOID) UpdateMapping(THIS_            \
00380         IN ULONG BytesWritten);                        \
00381                                                        \
00382     STDMETHODIMP_(ULONG) NumData(THIS);                \
00383                                                        \
00384     STDMETHODIMP_(BOOL) CancelBuffers(THIS);           \
00385                                                        \
00386     STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_    \
00387         IN PVOID Tag,                                  \
00388         OUT PPHYSICAL_ADDRESS  PhysicalAddress,        \
00389         OUT PVOID  *VirtualAddress,                    \
00390         OUT PULONG  ByteCount,                         \
00391         OUT PULONG  Flags);                            \
00392                                                        \
00393     STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag(     \
00394         IN PVOID Tag);                                 \
00395                                                        \
00396     STDMETHODIMP_(BOOLEAN) HasLastMappingFailed(THIS); \
00397     STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS);    \
00398     STDMETHODIMP_(BOOLEAN) GetAcquiredTagRange(THIS_      \
00399         IN PVOID * FirstTag,                           \
00400         IN PVOID * LastTag);
00401 
00402 
00403 
00404 /*****************************************************************************
00405  * IKsWorkSink
00406  *****************************************************************************
00407  */
00408 #undef INTERFACE
00409 #define INTERFACE IKsWorkSink
00410 
00411 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
00412 {
00413     DEFINE_ABSTRACT_UNKNOWN()
00414 
00415     STDMETHOD_(NTSTATUS, Work)(THIS);
00416 };
00417 
00418 /*****************************************************************************
00419  * IIrpStreamNotify
00420  *****************************************************************************
00421  */
00422 #undef INTERFACE
00423 #define INTERFACE IIrpStreamNotify
00424 
00425 struct IRPSTREAMPOSITION;
00426 
00427 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
00428 {
00429     DEFINE_ABSTRACT_UNKNOWN()
00430 
00431     STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
00432         IN PIRP Irp,
00433         IN BOOLEAN WAIT)PURE;
00434 
00435     STDMETHOD_(NTSTATUS, GetPosition)(THIS_
00436         OUT struct IRPSTREAMPOSITION * Position)PURE;
00437 };
00438 
00439 /*****************************************************************************
00440  * IKsShellTransport
00441  *****************************************************************************
00442  */
00443 
00444 #undef INTERFACE
00445 #define INTERFACE IKsShellTransport
00446 
00447 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT()                     \
00448     STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_                   \
00449         IN PIRP Irp,                                            \
00450         OUT IKsShellTransport ** Transport) PURE;               \
00451                                                                 \
00452     STDMETHOD_(NTSTATUS, Connect)(THIS_                         \
00453         IN IKsShellTransport * StartTransport,                  \
00454         OUT IKsShellTransport ** EndTransport,                  \
00455         IN KSPIN_DATAFLOW DataFlow)PURE;                        \
00456                                                                 \
00457     STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_                  \
00458         IN KSSTATE State1,                                      \
00459         IN KSSTATE State2,                                      \
00460         OUT IKsShellTransport ** EndTransport)PURE;             \
00461                                                                 \
00462     STDMETHOD_(NTSTATUS, SetResetState)(THIS_                   \
00463         IN KSRESET State1,                                      \
00464         OUT IKsShellTransport ** EndTransport)PURE;
00465 
00466 
00467 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
00468 {
00469     DEFINE_ABSTRACT_UNKNOWN()
00470 
00471     DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
00472 };
00473 
00474 /*****************************************************************************
00475  * IIrpStream
00476  *****************************************************************************
00477  */
00478 struct IRPSTREAM_POSITION;
00479 struct IRPSTREAMPACKETINFO;
00480 
00481 #define DEFINE_ABSTRACT_IRPSTREAM()                             \
00482     STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_                   \
00483         IN PIRP Irp,                                            \
00484         OUT IKsShellTransport ** Transport) PURE;               \
00485                                                                 \
00486     STDMETHOD_(NTSTATUS, Connect)(THIS_                         \
00487         IN IKsShellTransport * StartTransport,                  \
00488         OUT IKsShellTransport ** EndTransport,                  \
00489         IN KSPIN_DATAFLOW DataFlow)PURE;                        \
00490                                                                 \
00491     STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_                  \
00492         IN KSSTATE State1,                                      \
00493         IN KSSTATE State2,                                      \
00494         OUT IKsShellTransport ** EndTransport)PURE;             \
00495                                                                 \
00496     STDMETHOD_(NTSTATUS, SetResetState)(THIS_                   \
00497         IN KSRESET State1,                                      \
00498         OUT IKsShellTransport ** EndTransport)PURE;             \
00499                                                                 \
00500     STDMETHOD_(NTSTATUS, GetPosition)(THIS_                     \
00501         IN OUT struct IRPSTREAM_POSITION * Position) PURE;      \
00502                                                                 \
00503     STDMETHOD_(NTSTATUS, Init)(THIS_                            \
00504         IN BOOLEAN Wait,                                        \
00505         KSPIN_CONNECT *ConnectDetails,                          \
00506         PDEVICE_OBJECT DeviceObject,                            \
00507         PDMA_ADAPTER DmaAdapter) PURE;                          \
00508                                                                 \
00509     STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_                   \
00510         ULONG Wait)PURE;                                        \
00511                                                                 \
00512     STDMETHOD_(VOID, TerminatePacket)(THIS);                    \
00513                                                                 \
00514     STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_               \
00515        ULONG Unknown1,                                          \
00516        ULONG Unknown2,                                          \
00517        ULONG Unknown3,                                          \
00518        ULONG Unknown4)PURE;                                     \
00519                                                                 \
00520     STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_                   \
00521        struct IRPSTREAMPACKETINFO * Info1,                      \
00522        struct IRPSTREAMPACKETINFO * Info2)PURE;                 \
00523                                                                 \
00524     STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_                \
00525        ULONG Unknown1,                                          \
00526        ULONG Unknown2)PURE;                                     \
00527                                                                 \
00528     STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_              \
00529        IN IIrpStreamNotify * NotifyStream)PURE;
00530 
00531 
00532 
00533 #undef INTERFACE
00534 #define INTERFACE IIrpStream
00535 
00536 DECLARE_INTERFACE_(IIrpStream, IUnknown)
00537 {
00538     DEFINE_ABSTRACT_UNKNOWN()
00539 
00540     DEFINE_ABSTRACT_IRPSTREAM()
00541 };
00542 
00543 
00544 /*****************************************************************************
00545  * IIrpStreamPhysical
00546  *****************************************************************************
00547  */
00548 #undef INTERFACE
00549 #define INTERFACE IIrpStreamPhysical
00550 
00551 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
00552 {
00553     DEFINE_ABSTRACT_UNKNOWN()
00554 
00555     DEFINE_ABSTRACT_IRPSTREAM()
00556 
00557     STDMETHOD_(NTSTATUS, GetMapping)(THIS_
00558        IN PVOID Tag,
00559        OUT PPHYSICAL_ADDRESS PhysicalAddress,
00560        OUT PVOID * VirtualAddress,
00561        OUT PULONG ByteCount,
00562        OUT PULONG Flags)PURE;
00563 
00564 };
00565 
00566 /*****************************************************************************
00567  * IIrpStreamVirtual
00568  *****************************************************************************
00569  */
00570 #undef INTERFACE
00571 #define INTERFACE IIrpStreamVirtual
00572 
00573 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
00574 {
00575     DEFINE_ABSTRACT_UNKNOWN()
00576 
00577     DEFINE_ABSTRACT_IRPSTREAM()
00578 
00579     STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
00580        OUT PULONG OutSize,
00581        OUT PVOID * OutBuffer)PURE;
00582 
00583     STDMETHOD_(NTSTATUS, Copy)(THIS_
00584        IN BOOLEAN Wait,
00585        OUT ULONG Size,
00586        IN PULONG Buffer,
00587        OUT PVOID Result)PURE;
00588 
00589     STDMETHOD_(NTSTATUS, Complete)(THIS_
00590        IN ULONG Unknown1,
00591        IN PULONG Data)PURE;
00592 
00593     STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
00594 };
00595 
00596 /*****************************************************************************
00597  * IPortFilterWavePci
00598  *****************************************************************************
00599  */
00600 
00601 #undef INTERFACE
00602 #define INTERFACE IPortFilterWavePci
00603 
00604 struct IPortPinWavePci;
00605 
00606 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
00607 {
00608     DEFINE_ABSTRACT_UNKNOWN()
00609 
00610     DEFINE_ABSTRACT_IRPTARGET()
00611 
00612     STDMETHOD_(NTSTATUS, Init)(THIS_
00613         IN PPORTWAVEPCI Port)PURE;
00614 
00615     STDMETHOD_(NTSTATUS, FreePin)(THIS_
00616         IN struct IPortPinWavePci* Pin)PURE;
00617 };
00618 
00619 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
00620 
00621 #define IMP_IPortFilterPci           \
00622     IMP_IIrpTarget;                         \
00623     STDMETHODIMP_(NTSTATUS) Init(THIS_      \
00624         IN PPORTWAVEPCI Port);              \
00625     STDMETHODIMP_(NTSTATUS) FreePin(THIS_   \
00626         IN struct IPortPinWavePci* Pin)
00627 
00628 
00629 /*****************************************************************************
00630  * IPortPinWavePci
00631  *****************************************************************************
00632  */
00633 
00634 #undef INTERFACE
00635 #define INTERFACE IPortPinWavePci
00636 
00637 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
00638 {
00639     DEFINE_ABSTRACT_UNKNOWN()
00640 
00641     DEFINE_ABSTRACT_IRPTARGET()
00642 
00643     STDMETHOD_(NTSTATUS, Init)(THIS_
00644         IN PPORTWAVEPCI Port,
00645         IN PPORTFILTERWAVEPCI Filter,
00646         IN KSPIN_CONNECT * ConnectDetails,
00647         IN KSPIN_DESCRIPTOR * PinDescriptor,
00648         IN PDEVICE_OBJECT DeviceObject) PURE;
00649 
00650     STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
00651     STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
00652 };
00653 
00654 #define IMP_IPortPinWavePci                        \
00655     IMP_IIrpTarget;                                \
00656     STDMETHODIMP_(NTSTATUS) Init(THIS_             \
00657         IN PPORTWAVEPCI Port,                      \
00658         IN PPORTFILTERWAVEPCI Filter,              \
00659         IN KSPIN_CONNECT * ConnectDetails,         \
00660         IN KSPIN_DESCRIPTOR * PinDescriptor,       \
00661         IN PDEVICE_OBJECT DeviceObject);           \
00662                                                    \
00663     STDMETHODIMP_(PVOID) GetIrpStream();           \
00664     STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
00665 
00666 
00667 
00668 typedef IPortPinWavePci *PPORTPINWAVEPCI;
00669 
00670 
00671 #if (NTDDI_VERSION >= NTDDI_VISTA)
00672 
00673 /*****************************************************************************
00674  * IPortFilterWaveRT
00675  *****************************************************************************
00676  */
00677 
00678 #undef INTERFACE
00679 #define INTERFACE IPortFilterWaveRT
00680 
00681 #ifndef PPORTWAVERT
00682 typedef IPortWaveRT *PPORTWAVERT;
00683 #endif
00684 
00685 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
00686 {
00687     DEFINE_ABSTRACT_UNKNOWN()
00688 
00689     DEFINE_ABSTRACT_IRPTARGET()
00690 
00691     STDMETHOD_(NTSTATUS, Init)(THIS_
00692         IN PPORTWAVERT Port)PURE;
00693 };
00694 
00695 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
00696 
00697 #define IMP_IPortFilterWaveRT               \
00698     IMP_IIrpTarget;                         \
00699     STDMETHODIMP_(NTSTATUS) Init(THIS_      \
00700         IN PPORTWAVERT Port)
00701 
00702 
00703 /*****************************************************************************
00704  * IPortPinWaveRT
00705  *****************************************************************************
00706  */
00707 
00708 #undef INTERFACE
00709 #define INTERFACE IPortPinWaveRT
00710 
00711 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
00712 {
00713     DEFINE_ABSTRACT_UNKNOWN()
00714 
00715     DEFINE_ABSTRACT_IRPTARGET()
00716 
00717     STDMETHOD_(NTSTATUS, Init)(THIS_
00718         IN PPORTWAVERT Port,
00719         IN PPORTFILTERWAVERT Filter,
00720         IN KSPIN_CONNECT * ConnectDetails,
00721         IN KSPIN_DESCRIPTOR * PinDescriptor,
00722         IN PDEVICE_OBJECT DeviceObject) PURE;
00723 };
00724 
00725 typedef IPortPinWaveRT *PPORTPINWAVERT;
00726 
00727 #define IMP_IPortPinWaveRT                       \
00728     IMP_IIrpTarget;                              \
00729     STDMETHODIMP_(NTSTATUS) Init(THIS_           \
00730         IN PPORTWAVERT Port,                     \
00731         IN PPORTFILTERWAVERT Filter,             \
00732         IN KSPIN_CONNECT * ConnectDetails,       \
00733         IN KSPIN_DESCRIPTOR * PinDescriptor,     \
00734         IN PDEVICE_OBJECT DeviceObject)
00735 
00736 
00737 #endif
00738 
00739 /*****************************************************************************
00740  * IPortFilterWaveCyclic
00741  *****************************************************************************
00742  */
00743 
00744 #undef INTERFACE
00745 #define INTERFACE IPortFilterWaveCyclic
00746 
00747 struct IPortPinWaveCyclic;
00748 
00749 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
00750 {
00751     DEFINE_ABSTRACT_UNKNOWN()
00752 
00753     DEFINE_ABSTRACT_IRPTARGET()
00754 
00755     STDMETHOD_(NTSTATUS, Init)(THIS_
00756         IN PPORTWAVECYCLIC Port)PURE;
00757 
00758     STDMETHOD_(NTSTATUS, FreePin)(THIS_
00759         IN struct IPortPinWaveCyclic* Pin)PURE;
00760 };
00761 
00762 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
00763 
00764 #define IMP_IPortFilterWaveCyclic           \
00765     IMP_IIrpTarget;                         \
00766     STDMETHODIMP_(NTSTATUS) Init(THIS_      \
00767         IN PPORTWAVECYCLIC Port);           \
00768     STDMETHODIMP_(NTSTATUS) FreePin(THIS_   \
00769         IN struct IPortPinWaveCyclic* Pin)
00770 
00771 
00772 /*****************************************************************************
00773  * IPortPinWaveCyclic
00774  *****************************************************************************
00775  */
00776 
00777 #undef INTERFACE
00778 #define INTERFACE IPortPinWaveCyclic
00779 
00780 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
00781 {
00782     DEFINE_ABSTRACT_UNKNOWN()
00783 
00784     DEFINE_ABSTRACT_IRPTARGET()
00785 
00786     STDMETHOD_(NTSTATUS, Init)(THIS_
00787         IN PPORTWAVECYCLIC Port,
00788         IN PPORTFILTERWAVECYCLIC Filter,
00789         IN KSPIN_CONNECT * ConnectDetails,
00790         IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
00791 
00792     STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
00793     STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
00794     STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
00795     STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
00796     STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
00797 };
00798 
00799 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
00800 
00801 #define IMP_IPortPinWaveCyclic                           \
00802     IMP_IIrpTarget;                                      \
00803     STDMETHODIMP_(NTSTATUS) Init(THIS_                   \
00804         IN PPORTWAVECYCLIC Port,                         \
00805         IN PPORTFILTERWAVECYCLIC Filter,                 \
00806         IN KSPIN_CONNECT * ConnectDetails,               \
00807         IN KSPIN_DESCRIPTOR * PinDescriptor);            \
00808     STDMETHODIMP_(ULONG) GetCompletedPosition(THIS);     \
00809     STDMETHODIMP_(ULONG) GetCycleCount(THIS);            \
00810     STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS);      \
00811     STDMETHODIMP_(PVOID) GetIrpStream(THIS);             \
00812     STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
00813 
00814 
00815 /*****************************************************************************
00816  * IPortFilterDMus
00817  *****************************************************************************
00818  */
00819 
00820 #undef INTERFACE
00821 #define INTERFACE IPortFilterDMus
00822 
00823 struct IPortPinDMus;
00824 
00825 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
00826 {
00827     DEFINE_ABSTRACT_UNKNOWN()
00828 
00829     DEFINE_ABSTRACT_IRPTARGET()
00830 
00831     STDMETHOD_(NTSTATUS, Init)(THIS_
00832         IN PPORTDMUS Port)PURE;
00833 
00834     STDMETHOD_(NTSTATUS, FreePin)(THIS_
00835         IN struct IPortPinDMus* Pin)PURE;
00836 
00837     STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
00838 };
00839 
00840 typedef IPortFilterDMus *PPORTFILTERDMUS;
00841 
00842 #define IMP_IPortFilterDMus                 \
00843     IMP_IIrpTarget;                         \
00844     STDMETHODIMP_(NTSTATUS) Init(THIS_      \
00845         IN PPORTDMUS Port);                 \
00846     STDMETHODIMP_(NTSTATUS) FreePin(THIS_   \
00847         IN struct IPortPinDMus* Pin);       \
00848     STDMETHODIMP_(VOID) NotifyPins(THIS)
00849 
00850 /*****************************************************************************
00851  * IPortPinDMus
00852  *****************************************************************************
00853  */
00854 
00855 #undef INTERFACE
00856 #define INTERFACE IPortPinDMus
00857 
00858 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
00859 {
00860     DEFINE_ABSTRACT_UNKNOWN()
00861 
00862     DEFINE_ABSTRACT_IRPTARGET()
00863 
00864     STDMETHOD_(NTSTATUS, Init)(THIS_
00865         IN PPORTDMUS Port,
00866         IN PPORTFILTERDMUS Filter,
00867         IN KSPIN_CONNECT * ConnectDetails,
00868         IN KSPIN_DESCRIPTOR * PinDescriptor,
00869         IN PDEVICE_OBJECT DeviceObject) PURE;
00870 
00871     STDMETHOD_(VOID, Notify)(THIS) PURE;
00872 };
00873 
00874 #define IMP_IPortPinDMus                       \
00875     IMP_IIrpTarget;                            \
00876     STDMETHODIMP_(NTSTATUS) Init(THIS_         \
00877         IN PPORTDMUS Port,                     \
00878         IN PPORTFILTERDMUS Filter,             \
00879         IN KSPIN_CONNECT * ConnectDetails,     \
00880         IN KSPIN_DESCRIPTOR * PinDescriptor,   \
00881         IN PDEVICE_OBJECT DeviceObject);       \
00882     STDMETHODIMP_(VOID) Notify(THIS)
00883 
00884 typedef IPortPinDMus *PPORTPINDMUS;
00885 
00886 /*****************************************************************************
00887  * IDmaChannelInit
00888  *****************************************************************************
00889  */
00890 
00891 #ifdef _MSC_VER
00892 
00893 #define IMP_IDmaChannelEx                                                 \
00894     STDMETHODIMP_(NTSTATUS) AllocateBuffer(                               \
00895         IN  ULONG BufferSize,                                             \
00896         IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL);        \
00897                                                                           \
00898     STDMETHODIMP_(void) FreeBuffer(void);                                 \
00899     STDMETHODIMP_(ULONG) TransferCount(void);                             \
00900     STDMETHODIMP_(ULONG) MaximumBufferSize(void);                         \
00901     STDMETHODIMP_(ULONG) AllocatedBufferSize(void);                       \
00902     STDMETHODIMP_(ULONG) BufferSize(void);                                \
00903                                                                           \
00904     STDMETHODIMP_(void) SetBufferSize(                                    \
00905         IN  ULONG BufferSize);                                            \
00906                                                                           \
00907     STDMETHODIMP_(PVOID) SystemAddress(void);                             \
00908     STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress();                    \
00909     STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void);                \
00910                                                                           \
00911     STDMETHODIMP_(void) CopyTo(                                           \
00912         IN  PVOID Destination,                                            \
00913         IN  PVOID Source,                                                 \
00914         IN  ULONG ByteCount);                                             \
00915                                                                           \
00916     STDMETHODIMP_(void) CopyFrom(                                         \
00917         IN  PVOID Destination,                                            \
00918         IN  PVOID Source,                                                 \
00919         IN  ULONG ByteCount)
00920 
00921 #else
00922 
00923 #define IMP_IDmaChannelEx                                                 \
00924     STDMETHODIMP_(NTSTATUS) AllocateBuffer(                               \
00925         IN  ULONG BufferSize,                                             \
00926         IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL);        \
00927                                                                           \
00928     STDMETHODIMP_(void) FreeBuffer(void);                                 \
00929     STDMETHODIMP_(ULONG) TransferCount(void);                             \
00930     STDMETHODIMP_(ULONG) MaximumBufferSize(void);                         \
00931     STDMETHODIMP_(ULONG) AllocatedBufferSize(void);                       \
00932     STDMETHODIMP_(ULONG) BufferSize(void);                                \
00933                                                                           \
00934     STDMETHODIMP_(void) SetBufferSize(                                    \
00935         IN  ULONG BufferSize);                                            \
00936                                                                           \
00937     STDMETHODIMP_(PVOID) SystemAddress(void);                             \
00938     STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(                      \
00939         IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL);        \
00940     STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void);                \
00941                                                                           \
00942     STDMETHODIMP_(void) CopyTo(                                           \
00943         IN  PVOID Destination,                                            \
00944         IN  PVOID Source,                                                 \
00945         IN  ULONG ByteCount);                                             \
00946                                                                           \
00947     STDMETHODIMP_(void) CopyFrom(                                         \
00948         IN  PVOID Destination,                                            \
00949         IN  PVOID Source,                                                 \
00950         IN  ULONG ByteCount)
00951 
00952 
00953 
00954 #endif
00955 
00956 
00957 #define IMP_IDmaChannelSlaveEx                 \
00958     IMP_IDmaChannelEx;                         \
00959     STDMETHODIMP_(NTSTATUS) Start(             \
00960         IN  ULONG MapSize,                     \
00961         IN  BOOLEAN WriteToDevice);            \
00962                                                \
00963     STDMETHODIMP_(NTSTATUS) Stop(void);        \
00964     STDMETHODIMP_(ULONG) ReadCounter(void);    \
00965                                                \
00966     STDMETHODIMP_(NTSTATUS) WaitForTC(         \
00967         ULONG Timeout)
00968 
00969 #define IMP_IDmaChannelInit\
00970     IMP_IDmaChannelSlaveEx;\
00971     STDMETHODIMP_(NTSTATUS) Init( \
00972         IN  PDEVICE_DESCRIPTION DeviceDescription, \
00973         IN  PDEVICE_OBJECT DeviceObject)
00974 
00975 #ifdef _MSC_VER
00976 
00977 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
00978     STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
00979         IN  ULONG BufferSize, \
00980         IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
00981 \
00982     STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
00983     STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
00984     STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
00985     STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
00986     STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
00987 \
00988     STDMETHOD_(void, SetBufferSize)( THIS_ \
00989         IN  ULONG BufferSize) PURE; \
00990 \
00991     STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
00992     STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS) PURE;  \
00993     STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
00994 \
00995     STDMETHOD_(void, CopyTo)( THIS_ \
00996         IN  PVOID Destination, \
00997         IN  PVOID Source, \
00998         IN  ULONG ByteCount) PURE; \
00999 \
01000     STDMETHOD_(void, CopyFrom)( THIS_ \
01001         IN  PVOID Destination, \
01002         IN  PVOID Source, \
01003         IN  ULONG ByteCount) PURE;
01004 #else
01005 
01006 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
01007     STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
01008         IN  ULONG BufferSize, \
01009         IN  PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
01010 \
01011     STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
01012     STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
01013     STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
01014     STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
01015     STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
01016 \
01017     STDMETHOD_(void, SetBufferSize)( THIS_ \
01018         IN  ULONG BufferSize) PURE; \
01019 \
01020     STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
01021     STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_       \
01022         IN PPHYSICAL_ADDRESS Address) PURE; \
01023     STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
01024 \
01025     STDMETHOD_(void, CopyTo)( THIS_ \
01026         IN  PVOID Destination, \
01027         IN  PVOID Source, \
01028         IN  ULONG ByteCount) PURE; \
01029 \
01030     STDMETHOD_(void, CopyFrom)( THIS_ \
01031         IN  PVOID Destination, \
01032         IN  PVOID Source, \
01033         IN  ULONG ByteCount) PURE;
01034 
01035 #endif
01036 #undef INTERFACE
01037 #define INTERFACE IDmaChannelInit
01038 
01039 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
01040 {
01041     DEFINE_ABSTRACT_UNKNOWN()
01042     DEFINE_ABSTRACT_DMACHANNEL_EX()
01043     DEFINE_ABSTRACT_DMACHANNELSLAVE()
01044 
01045     STDMETHOD_(NTSTATUS, Init)( THIS_
01046         IN PDEVICE_DESCRIPTION DeviceDescription,
01047         IN PDEVICE_OBJECT DeviceObject) PURE;
01048 };
01049 
01050 #undef INTERFACE
01051 
01052 /*****************************************************************************
01053  * IPortFilterTopology
01054  *****************************************************************************
01055  */
01056 
01057 #undef INTERFACE
01058 #define INTERFACE IPortFilterTopology
01059 
01060 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
01061 {
01062     DEFINE_ABSTRACT_UNKNOWN()
01063 
01064     DEFINE_ABSTRACT_IRPTARGET()
01065 
01066     STDMETHOD_(NTSTATUS, Init)(THIS_
01067         IN PPORTTOPOLOGY Port)PURE;
01068 };
01069 
01070 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
01071 
01072 #define IMP_IPortFilterTopology        \
01073     IMP_IIrpTarget;                    \
01074     STDMETHODIMP_(NTSTATUS) Init(THIS_ \
01075         IN PPORTTOPOLOGY Port)
01076 
01077 #undef INTERFACE
01078 
01079 /*****************************************************************************
01080  * IPortWaveRTStreamInit
01081  *****************************************************************************
01082  */
01083 
01084 #undef INTERFACE
01085 #define INTERFACE IPortWaveRTStreamInit
01086 
01087 
01088 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
01089 {
01090     DEFINE_ABSTRACT_UNKNOWN()
01091 
01092     STDMETHOD_(PMDL, AllocatePagesForMdl)
01093     (   THIS_
01094         IN      PHYSICAL_ADDRESS    HighAddress,
01095         IN      SIZE_T              TotalBytes
01096     )   PURE;
01097 
01098     STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
01099     (   THIS_
01100         IN      PHYSICAL_ADDRESS    LowAddress,
01101         IN      PHYSICAL_ADDRESS    HighAddress,
01102         IN      SIZE_T              TotalBytes
01103     )   PURE;
01104 
01105     STDMETHOD_(PVOID, MapAllocatedPages)
01106     (   THIS_
01107         IN      PMDL                    MemoryDescriptorList,
01108         IN      MEMORY_CACHING_TYPE     CacheType
01109     )   PURE;
01110 
01111     STDMETHOD_(VOID, UnmapAllocatedPages)
01112     (   THIS_
01113         IN      PVOID   BaseAddress,
01114         IN      PMDL    MemoryDescriptorList
01115     )   PURE;
01116 
01117     STDMETHOD_(VOID, FreePagesFromMdl)
01118     (   THIS_
01119         IN      PMDL    MemoryDescriptorList
01120     )   PURE;
01121 
01122     STDMETHOD_(ULONG, GetPhysicalPagesCount)
01123     (   THIS_
01124         IN      PMDL    MemoryDescriptorList
01125     )   PURE;
01126 
01127     STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
01128     (   THIS_
01129         IN      PPHYSICAL_ADDRESS Address,
01130         IN      PMDL              MemoryDescriptorList,
01131         IN      ULONG             Index
01132     )   PURE;
01133 };
01134 
01135 #undef INTERFACE
01136 
01137 #define IMP_IPortWaveRTStreamInit                                         \
01138     STDMETHODIMP_(PMDL) AllocatePagesForMdl                               \
01139     (   THIS_                                                             \
01140         IN      PHYSICAL_ADDRESS    HighAddress,                          \
01141         IN      SIZE_T              TotalBytes                            \
01142     );                                                                    \
01143                                                                           \
01144     STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl                     \
01145     (   THIS_                                                             \
01146         IN      PHYSICAL_ADDRESS    LowAddress,                           \
01147         IN      PHYSICAL_ADDRESS    HighAddress,                          \
01148         IN      SIZE_T              TotalBytes                            \
01149     );                                                                    \
01150                                                                           \
01151     STDMETHODIMP_(PVOID) MapAllocatedPages                                \
01152     (   THIS_                                                             \
01153         IN      PMDL                    MemoryDescriptorList,             \
01154         IN      MEMORY_CACHING_TYPE     CacheType                         \
01155     );                                                                    \
01156                                                                           \
01157     STDMETHODIMP_(VOID) UnmapAllocatedPages                               \
01158     (   THIS_                                                             \
01159         IN      PVOID   BaseAddress,                                      \
01160         IN      PMDL    MemoryDescriptorList                              \
01161     );                                                                    \
01162                                                                           \
01163     STDMETHODIMP_(VOID) FreePagesFromMdl                                  \
01164     (   THIS_                                                             \
01165         IN      PMDL    MemoryDescriptorList                              \
01166     );                                                                    \
01167                                                                           \
01168     STDMETHODIMP_(ULONG) GetPhysicalPagesCount                            \
01169     (   THIS_                                                             \
01170         IN      PMDL    MemoryDescriptorList                              \
01171     );                                                                    \
01172                                                                           \
01173     STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress                \
01174     (   THIS_                                                             \
01175         IN      PPHYSICAL_ADDRESS Address,                                \
01176         IN      PMDL              MemoryDescriptorList,                   \
01177         IN      ULONG             Index                                   \
01178     )
01179 
01180 #ifndef IMP_IPortClsVersion
01181 
01182 #define IMP_IPortClsVersion \
01183     STDMETHODIMP_(DWORD) GetVersion(void);
01184 
01185 #endif
01186 
01187 #ifdef IMP_IPortWaveRT
01188 #define IMP_IPortWaveRT IMP_IPort
01189 #endif
01190 
01191 #endif

Generated on Sat May 26 2012 04:27:07 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.