00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
DEFINE_GUID( GUID_MF_ENUMERATION_INTERFACE,        
00023              0xaeb895f0L, 0x5586, 0x11d1, 0x8d, 0x84, 0x00, 0xa0, 0xc9, 0x06, 0xb2, 0x44 );
00024 
00025 
#if !defined(_MF_)
00026 #define _MF_
00027 
00028 
00029 
00030 
00031 
00032 #define MF_FLAGS_EVEN_IF_NO_RESOURCE            0x00000001
00033 #define MF_FLAGS_NO_CREATE_IF_NO_RESOURCE       0x00000002
00034 #define MF_FLAGS_FILL_IN_UNKNOWN_RESOURCE       0x00000004
00035 #define MF_FLAGS_CREATE_BUT_NO_SHOW_DISABLED    0x00000008
00036 
00037 typedef struct _MF_RESOURCE_MAP {
00038     
00039     ULONG 
Count;
00040     UCHAR 
Resources[
ANYSIZE_ARRAY];
00041 
00042 } 
MF_RESOURCE_MAP, *
PMF_RESOURCE_MAP;
00043 
00044 
00045 typedef struct _MF_VARYING_RESOURCE_ENTRY {
00046 
00047     UCHAR 
ResourceIndex;
00048     UCHAR 
Reserved[3];      
00049     ULONG 
Offset;
00050     ULONG 
Size;
00051     ULONG 
MaxCount;
00052 
00053 } 
MF_VARYING_RESOURCE_ENTRY, *
PMF_VARYING_RESOURCE_ENTRY;
00054 
00055 
00056 typedef struct _MF_VARYING_RESOURCE_MAP {
00057     
00058     ULONG 
Count;
00059     MF_VARYING_RESOURCE_ENTRY Resources[
ANYSIZE_ARRAY];
00060 
00061 } 
MF_VARYING_RESOURCE_MAP, *
PMF_VARYING_RESOURCE_MAP;
00062 
00063 
00064 typedef struct _MF_DEVICE_INFO *
PMF_DEVICE_INFO;
00065 
00066 typedef struct _MF_DEVICE_INFO {
00067     
00068     
00069     
00070     
00071     UNICODE_STRING 
Name;
00072 
00073     
00074     
00075     
00076     UNICODE_STRING 
HardwareID;
00077     
00078     
00079     
00080     
00081     UNICODE_STRING 
CompatibleID;
00082 
00083     
00084     
00085     
00086     PMF_RESOURCE_MAP ResourceMap;
00087     
00088     
00089     
00090     
00091     PMF_VARYING_RESOURCE_MAP VaryingResourceMap;
00092     
00093     
00094     
00095     
00096     
00097     
00098     
00099     
00100     
00101     
00102     
00103     
00104     
00105     
00106     ULONG 
MfFlags;
00107 
00108 } 
MF_DEVICE_INFO;
00109 
00110 
typedef
00111 
NTSTATUS
00112 (*PMF_ENUMERATE_CHILD)(
00113     IN PVOID Context,
00114     IN ULONG 
Index,
00115     OUT 
PMF_DEVICE_INFO ChildInfo
00116     );
00117 
00118 
00119 
00120 
00121 
00122 
00123 
00124 
00125 
00126 
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 
00141 
00142 
00143 
00144 
00145 typedef struct _MF_ENUMERATION_INTERFACE {
00146     
00147     
00148     
00149     
00150     USHORT Size;
00151     USHORT Version;
00152     PVOID Context;
00153     PINTERFACE_REFERENCE 
InterfaceReference;
00154     PINTERFACE_DEREFERENCE 
InterfaceDereference;
00155     
00156     
00157     
00158     
00159     PMF_ENUMERATE_CHILD EnumerateChild;
00160 
00161 } 
MF_ENUMERATION_INTERFACE, *
PMF_ENUMERATION_INTERFACE;
00162 
00163 
#endif