#ifndef _MP_DEVF_H_ #define _MP_DEVF_H_ #include #define MULTIPATH_CONTROL ((ULONG) 'mp') // // IOCTLS that the MultiPath driver sends. // // // IOCTLS that the Device Filter sends. // #define IOCTL_MPDEV_QUERY_PDO CTL_CODE (MULTIPATH_CONTROL, 0x12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_MPDEV_REGISTER CTL_CODE (MULTIPATH_CONTROL, 0x13, METHOD_BUFFERED, FILE_ANY_ACCESS) // // QueryPDO input structure. // typedef struct _MPIO_PDO_QUERY { PDEVICE_OBJECT DeviceObject; } MPIO_PDO_QUERY, *PMPIO_PDO_QUERY; // // PDO Registration function that the device filter // will call to set-up side-band comms. // typedef NTSTATUS (*PDEV_POWER_NOTIFICATION) ( IN PDEVICE_OBJECT MPDiskObject, IN PDEVICE_OBJECT FilterObject, IN PIRP Irp ); typedef NTSTATUS (*PDEV_PNP_NOTIFICATION) ( IN PDEVICE_OBJECT MPDiskObject, IN PDEVICE_OBJECT FilterObject, IN PIRP Irp ); typedef struct _MPIO_PDO_INFO { // // MP Disk PDO. // PDEVICE_OBJECT PdoObject; // // Routine for Power Irp handling. // PDEV_POWER_NOTIFICATION DevicePowerNotify; // // Routine for PnP Irp handling. // PDEV_PNP_NOTIFICATION DevicePnPNotify; } MPIO_PDO_INFO, *PMPIO_PDO_INFO; typedef NTSTATUS (*PDEV_PDO_REGISTRATION)( IN PDEVICE_OBJECT MPDiskObject, IN PDEVICE_OBJECT FilterObject, IN PDEVICE_OBJECT LowerDevice, IN OUT PMPIO_PDO_INFO PdoInformation ); // // Output structure for the DEV_REGISTRATION IOCTL. // typedef struct _MPIO_REG_INFO { // // The filter's D.O. // PDEVICE_OBJECT FilterObject; // // The target PDO aka Scsiport's PDO. // PDEVICE_OBJECT LowerDevice; // // The PDO that corresponds to the real device // that the dev. filter is layer over. (ie. the MPDisk) // PDEVICE_OBJECT MPDiskObject; // // A routine to call to register with // the MPIO PDO. // PDEV_PDO_REGISTRATION DevicePdoRegister; } MPIO_REG_INFO, *PMPIO_REG_INFO; #endif // _MP_DEV_H_