home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / software / pelne / optionp / iis4_07.cab / openf.h < prev    next >
C/C++ Source or Header  |  1997-10-25  |  4KB  |  180 lines

  1. /*++
  2.  
  3.    Copyright    (c)    1995-1997    Microsoft Corporation
  4.  
  5.    Module  Name :
  6.      
  7.      openf.h
  8.  
  9.    Abstract:
  10.  
  11.      This module defines functions for opening and closing files
  12.       and provides transparent caching for file handles
  13.  
  14.    Project:
  15.    
  16.        Internet Server API Extnensions Samples DLL
  17.  
  18.    Revision History:
  19.  
  20. --*/
  21.  
  22. # ifndef _OPENF_HXX_
  23. # define _OPENF_HXX_
  24.  
  25. /************************************************************
  26.  *     Include Headers
  27.  ************************************************************/
  28.  
  29. # include <windows.h>
  30. # include <httpext.h>
  31.  
  32. /************************************************************
  33.  *   Type Definitions  
  34.  ************************************************************/
  35.  
  36. //
  37. //  Doubly linked list structure.  Can be used as either a list head, or
  38. //  as link words.
  39. //
  40.  
  41. // typedef struct _LIST_ENTRY {
  42. //   struct _LIST_ENTRY * volatile Flink;
  43. //   struct _LIST_ENTRY * volatile Blink;
  44. // } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
  45.  
  46.  
  47. //
  48. //  Doubly-linked list manipulation routines.  Implemented as macros
  49. //  but logically these are procedures.
  50. //
  51.  
  52. //
  53. //  VOID
  54. //  InitializeListHead(
  55. //      PLIST_ENTRY ListHead
  56. //      );
  57. //
  58.  
  59. #define InitializeListHead(ListHead) (\
  60.     (ListHead)->Flink = (ListHead)->Blink = (ListHead))
  61.  
  62. //
  63. //  BOOLEAN
  64. //  IsListEmpty(
  65. //      PLIST_ENTRY ListHead
  66. //      );
  67. //
  68.  
  69. #define IsListEmpty(ListHead) \
  70.     ((ListHead)->Flink == (ListHead))
  71.  
  72. //
  73. //  PLIST_ENTRY
  74. //  RemoveHeadList(
  75. //      PLIST_ENTRY ListHead
  76. //      );
  77. //
  78.  
  79. #define RemoveHeadList(ListHead) \
  80.     (ListHead)->Flink;\
  81. {RemoveEntryList((ListHead)->Flink)}
  82.  
  83. //
  84. //  PLIST_ENTRY
  85. //  RemoveTailList(
  86. //      PLIST_ENTRY ListHead
  87. //      );
  88. //
  89.  
  90. #define RemoveTailList(ListHead) \
  91.     (ListHead)->Blink;\
  92. {RemoveEntryList((ListHead)->Blink)}
  93.  
  94. //
  95. //  VOID
  96. //  RemoveEntryList(
  97. //      PLIST_ENTRY Entry
  98. //      );
  99. //
  100.  
  101. #define RemoveEntryList(Entry) {\
  102.     PLIST_ENTRY _EX_Blink;\
  103.     PLIST_ENTRY _EX_Flink;\
  104.     _EX_Flink = (Entry)->Flink;\
  105.     _EX_Blink = (Entry)->Blink;\
  106.     _EX_Blink->Flink = _EX_Flink;\
  107.     _EX_Flink->Blink = _EX_Blink;\
  108.                             }
  109.  
  110. //
  111. //  VOID
  112. //  InsertTailList(
  113. //      PLIST_ENTRY ListHead,
  114. //      PLIST_ENTRY Entry
  115. //      );
  116. //
  117.  
  118. #define InsertTailList(ListHead,Entry) {\
  119.     PLIST_ENTRY _EX_Blink;\
  120.     PLIST_ENTRY _EX_ListHead;\
  121.     _EX_ListHead = (ListHead);\
  122.     _EX_Blink = _EX_ListHead->Blink;\
  123.     (Entry)->Flink = _EX_ListHead;\
  124.     (Entry)->Blink = _EX_Blink;\
  125.     _EX_Blink->Flink = (Entry);\
  126.     _EX_ListHead->Blink = (Entry);\
  127.                                     }
  128.  
  129. //
  130. //  VOID
  131. //  InsertHeadList(
  132. //      PLIST_ENTRY ListHead,
  133. //      PLIST_ENTRY Entry
  134. //      );
  135. //
  136.  
  137. #define InsertHeadList(ListHead,Entry) {\
  138.     PLIST_ENTRY _EX_Flink;\
  139.     PLIST_ENTRY _EX_ListHead;\
  140.     _EX_ListHead = (ListHead);\
  141.     _EX_Flink = _EX_ListHead->Flink;\
  142.     (Entry)->Flink = _EX_Flink;\
  143.     (Entry)->Blink = _EX_ListHead;\
  144.     _EX_Flink->Blink = (Entry);\
  145.     _EX_ListHead->Flink = (Entry);\
  146.                                     }
  147.  
  148.  
  149. /************************************************************
  150.  *   Function Definitions  
  151.  ************************************************************/
  152.  
  153.  
  154. //
  155. // Initialization and cleanup functions
  156. //
  157.  
  158. DWORD   InitFileHandleCache(VOID);
  159. DWORD   CleanupFileHandleCache(VOID);
  160.  
  161. HANDLE  FcOpenFile(IN EXTENSION_CONTROL_BLOCK * pecb, IN LPCSTR pszFile);
  162. DWORD   FcCloseFile(IN HANDLE hFile);
  163.  
  164. BOOL    FcReadFromFile(
  165.                IN  HANDLE hFile,
  166.                OUT CHAR * pchBuffer,
  167.                IN  DWORD  dwBufferSize,
  168.                OUT LPDWORD  pcbRead,
  169.                IN OUT LPOVERLAPPED  pov
  170.                );
  171.  
  172.  
  173. # endif // _OPENF_HXX_
  174.  
  175. /************************ End of File ***********************/
  176.  
  177.  
  178.  
  179.  
  180.