ShTypes.Idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:7k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (c) Microsoft Corporation. All rights reserved.
  5. //
  6. //  File: shtypes.idl
  7. //
  8. //  Contents: This interface definition contains typedefs for remotable
  9. //            shell data types.
  10. //
  11. //  History:  18-JUN-99 ZekeL - created file
  12. //
  13. //--------------------------------------------------------------------------
  14. cpp_quote("//+-------------------------------------------------------------------------")
  15. cpp_quote("//")
  16. cpp_quote("//  Microsoft Windows")
  17. cpp_quote("//  Copyright (c) Microsoft Corporation. All rights reserved.")
  18. cpp_quote("//")
  19. cpp_quote("//--------------------------------------------------------------------------")
  20. //
  21. // Import definitions of the base types related to the 64b porting effort.
  22. //
  23. import "wtypes.idl";
  24. cpp_quote("//===========================================================================")
  25. cpp_quote("//")
  26. cpp_quote("// Object identifiers in the explorer's name space (ItemID and IDList)")
  27. cpp_quote("//")
  28. cpp_quote("//  All the items that the user can browse with the explorer (such as files,")
  29. cpp_quote("// directories, servers, work-groups, etc.) has an identifier which is unique")
  30. cpp_quote("// among items within the parent folder. Those identifiers are called item")
  31. cpp_quote("// IDs (SHITEMID). Since all its parent folders have their own item IDs,")
  32. cpp_quote("// any items can be uniquely identified by a list of item IDs, which is called")
  33. cpp_quote("// an ID list (ITEMIDLIST).")
  34. cpp_quote("//")
  35. cpp_quote("//  ID lists are almost always allocated by the task allocator (see some")
  36. cpp_quote("// description below as well as OLE 2.0 SDK) and may be passed across")
  37. cpp_quote("// some of shell interfaces (such as IShellFolder). Each item ID in an ID list")
  38. cpp_quote("// is only meaningful to its parent folder (which has generated it), and all")
  39. cpp_quote("// the clients must treat it as an opaque binary data except the first two")
  40. cpp_quote("// bytes, which indicates the size of the item ID.")
  41. cpp_quote("//")
  42. cpp_quote("//  When a shell extension -- which implements the IShellFolder interace --")
  43. cpp_quote("// generates an item ID, it may put any information in it, not only the data")
  44. cpp_quote("// with that it needs to identifies the item, but also some additional")
  45. cpp_quote("// information, which would help implementing some other functions efficiently.")
  46. cpp_quote("// For example, the shell's IShellFolder implementation of file system items")
  47. cpp_quote("// stores the primary (long) name of a file or a directory as the item")
  48. cpp_quote("// identifier, but it also stores its alternative (short) name, size and date")
  49. cpp_quote("// etc.")
  50. cpp_quote("//")
  51. cpp_quote("//  When an ID list is passed to one of shell APIs (such as SHGetPathFromIDList),")
  52. cpp_quote("// it is always an absolute path -- relative from the root of the name space,")
  53. cpp_quote("// which is the desktop folder. When an ID list is passed to one of IShellFolder")
  54. cpp_quote("// member function, it is always a relative path from the folder (unless it")
  55. cpp_quote("// is explicitly specified).")
  56. cpp_quote("//")
  57. cpp_quote("//===========================================================================")
  58. cpp_quote("//")
  59. cpp_quote("// SHITEMID -- Item ID  (mkid)")
  60. cpp_quote("//     USHORT      cb;             // Size of the ID (including cb itself)")
  61. cpp_quote("//     BYTE        abID[];         // The item ID (variable length)")
  62. cpp_quote("//")
  63. cpp_quote("#include <pshpack1.h>")
  64. typedef struct _SHITEMID        
  65. {
  66.     USHORT      cb;             
  67.     BYTE        abID[];         
  68. } SHITEMID;
  69. cpp_quote("#include <poppack.h>")
  70. cpp_quote("#if defined(_M_IX86)")
  71. cpp_quote("#define __unaligned")
  72. cpp_quote("#endif // __unaligned")
  73. //  WARNING: SHITEMID's have no marshalling support
  74. typedef SHITEMID __unaligned *LPSHITEMID;
  75. typedef const SHITEMID __unaligned *LPCSHITEMID;
  76. cpp_quote("//")
  77. cpp_quote("// ITEMIDLIST -- List if item IDs (combined with 0-terminator)")
  78. cpp_quote("//")
  79. cpp_quote("#include <pshpack1.h>")
  80. typedef struct _ITEMIDLIST      // idl
  81. {
  82.     SHITEMID    mkid;
  83. } ITEMIDLIST;
  84. cpp_quote("#include <poppack.h>")
  85. typedef [unique] BYTE_BLOB * wirePIDL;
  86. typedef [wire_marshal(wirePIDL)] ITEMIDLIST __unaligned * LPITEMIDLIST;
  87. typedef [wire_marshal(wirePIDL)] const ITEMIDLIST __unaligned * LPCITEMIDLIST;
  88. #ifndef MAX_PATH
  89. #define MAX_PATH 260
  90. #endif
  91. // make midl see a def of this stuct, but when the marshallers are built
  92. // the defs of these get pulled from winbase.h
  93. typedef struct _WINBASE_DEFINED_STRUCT { int dummy; } WINBASE_DEFINED_STRUCT ;
  94. #define WINBASE_DEFINED_MIDL
  95. cpp_quote("#ifdef WINBASE_DEFINED_MIDL")
  96. typedef WINBASE_DEFINED_STRUCT WIN32_FIND_DATAA;
  97. typedef WINBASE_DEFINED_STRUCT WIN32_FIND_DATAW;
  98. cpp_quote("#endif // WINBASE_DEFINED_MIDL")
  99. cpp_quote("//-------------------------------------------------------------------------")
  100. cpp_quote("//")
  101. cpp_quote("// struct STRRET")
  102. cpp_quote("//")
  103. cpp_quote("// structure for returning strings from IShellFolder member functions")
  104. cpp_quote("//")
  105. cpp_quote("//-------------------------------------------------------------------------")
  106. cpp_quote("//")
  107. cpp_quote("//  uType indicate which union member to use ")
  108. cpp_quote("//    STRRET_WSTR    Use STRRET.pOleStr     must be freed by caller of GetDisplayNameOf")
  109. cpp_quote("//    STRRET_OFFSET  Use STRRET.uOffset     Offset into SHITEMID for ANSI string ")
  110. cpp_quote("//    STRRET_CSTR    Use STRRET.cStr        ANSI Buffer")
  111. cpp_quote("//")
  112. typedef [v1_enum] enum tagSTRRET_TYPE{
  113.     STRRET_WSTR    = 0x0000,          // Use STRRET.pOleStr
  114.     STRRET_OFFSET  = 0x0001,          // Use STRRET.uOffset to Ansi
  115.     STRRET_CSTR    = 0x0002,          // Use STRRET.cStr
  116. } STRRET_TYPE;
  117. cpp_quote("#include <pshpack8.h>")
  118. typedef struct _STRRET 
  119. {
  120.     UINT uType;
  121.     [switch_type(UINT), switch_is(uType)] union 
  122.     {
  123.     [case(STRRET_WSTR)][string]    LPWSTR    pOleStr;        
  124.     [case(STRRET_OFFSET)]          UINT      uOffset;        
  125.     [case(STRRET_CSTR)]            char      cStr[MAX_PATH]; 
  126.     } DUMMYUNIONNAME;
  127. } STRRET;
  128. cpp_quote("#include <poppack.h>")
  129. typedef STRRET *LPSTRRET;
  130. cpp_quote("//-------------------------------------------------------------------------")
  131. cpp_quote("//")
  132. cpp_quote("// struct SHELLDETAILS")
  133. cpp_quote("//")
  134. cpp_quote("// structure for returning strings from IShellDetails")
  135. cpp_quote("//")
  136. cpp_quote("//-------------------------------------------------------------------------")
  137. cpp_quote("//")
  138. cpp_quote("//  fmt;            // LVCFMT_* value (header only)")
  139. cpp_quote("//  cxChar;         // Number of 'average' characters (header only)")
  140. cpp_quote("//  str;            // String information")
  141. cpp_quote("//")
  142. cpp_quote("#include <pshpack1.h>")
  143. typedef struct _SHELLDETAILS
  144. {
  145.     int     fmt;            // LVCFMT_* value (header only)
  146.     int     cxChar;         // Number of "average" characters (header only)
  147.     STRRET  str;            // String information
  148. } SHELLDETAILS, *LPSHELLDETAILS;
  149. cpp_quote("#include <poppack.h>")