Ignore:
Timestamp:
Jun 17, 1999, 8:22:43 PM (26 years ago)
Author:
phaller
Message:

Fix: major restructuring of Open32 handle management, HandleManager

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/HandleManager.h

    r99 r111  
    1 /* $Id: HandleManager.h,v 1.3 1999-06-10 19:11:30 phaller Exp $ */
     1/* $Id: HandleManager.h,v 1.4 1999-06-17 18:21:36 phaller Exp $ */
    22
    33/*
     
    5555
    5656
    57 #define IS_HM_HANDLE(hHandle) ( (hHandle & ~HM_HANDLE_MASK) == HM_HANDLE_ID )
     57//#define IS_HM_HANDLE(hHandle) ( (hHandle & ~HM_HANDLE_MASK) == HM_HANDLE_ID )
    5858
    5959
     
    7474#define FILE_TYPE_REMOTE    0x8000
    7575
     76#ifndef INVALID_HANDLE_ERROR
     77#define INVALID_HANDLE_ERROR (-1)
     78#endif
    7679
    7780
     
    8285typedef struct _HMHANDLEDATA
    8386{
    84   HANDLE          hHandle;                           /* a copy of the handle */
     87  HANDLE          hHMHandle;                         /* a copy of the handle */
     88  HANDLE          hWinHandle;                /* a copy of the windows handle */
    8589
    8690  DWORD           dwType;                          /* handle type identifier */
     
    9599
    96100
    97 #ifdef __cplusplus
    98 class HMDeviceHandler
    99 {
    100   /***************************************************************************
    101    * The following methods are called by the handle manager request router.  *
    102    * They are exact replacements for the corresponding Win32 calls.          *
    103    ***************************************************************************/
    104 
    105 public:
    106   LPCSTR lpHMDeviceName;                   /* a reference to the device name */
    107 
    108   HMDeviceHandler(LPCSTR lpDeviceName);      /* constructor with device name */
    109 
    110 
    111   /***********************************
    112    * handle generic standard methods *
    113    ***********************************/
    114 
    115   /* this is a special internal method to handle non-standard requests       */
    116   /* such as GetConsoleMode() for console devices                            */
    117   virtual DWORD  _DeviceRequest (PHMHANDLEDATA pHMHandleData,
    118                                  ULONG         ulRequestCode,
    119                                  ULONG         arg1,
    120                                  ULONG         arg2,
    121                                  ULONG         arg3,
    122                                  ULONG         arg4);
    123 
    124                        /* this is a handler method for calls to CreateFile() */
    125   virtual DWORD  CreateFile (LPCSTR        lpFileName,
    126                              PHMHANDLEDATA pHMHandleData,
    127                              PVOID         lpSecurityAttributes,
    128                              PHMHANDLEDATA pHMHandleDataTemplate);
    129 
    130                       /* this is a handler method for calls to CloseHandle() */
    131   virtual DWORD  CloseHandle(PHMHANDLEDATA pHMHandleData);
    132 
    133                            /* this is a handler method for calls to ReadFile() */
    134   virtual DWORD  ReadFile   (PHMHANDLEDATA pHMHandleData,
    135                              LPCVOID       lpBuffer,
    136                              DWORD         nNumberOfBytesToRead,
    137                              LPDWORD       lpNumberOfBytesRead,
    138                              LPOVERLAPPED  lpOverlapped);
    139 
    140                         /* this is a handler method for calls to WriteFile() */
    141   virtual DWORD  WriteFile  (PHMHANDLEDATA pHMHandleData,
    142                              LPCVOID       lpBuffer,
    143                              DWORD         nNumberOfBytesToWrite,
    144                              LPDWORD       lpNumberOfBytesWritten,
    145                              LPOVERLAPPED  lpOverlapped);
    146 
    147                       /* this is a handler method for calls to GetFileType() */
    148   virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
    149 };
    150 
    151 #endif
    152 
    153 
    154101/*****************************************************************************
    155102 * Prototypes                                                                *
     
    159106
    160107DWORD  HMTerminate(void);            /* terminate the HandleManager */
    161 
    162 
    163 #ifdef __cplusplus
    164                             /* register a new device with the handle manager */
    165 DWORD  HMDeviceRegister(PSZ pszDeviceName, HMDeviceHandler *pDeviceHandler);
    166 #endif
    167 
    168108
    169109
     
    174114BOOL    HMSetStdHandle(DWORD  nStdHandle,
    175115                               HANDLE hHandle);
    176 
    177                        /* this is a handler method for calls to CreateFile() */
    178 HANDLE  HMCreateFile (LPCSTR       lpFileName,
    179                               DWORD        dwDesiredAccess,
    180                               DWORD        dwShareMode,
    181                               PVOID        lpSecurityAttributes,
    182                               DWORD        dwCreationDisposition,
    183                               DWORD        dwFlagsAndAttributes,
    184                               HANDLE       hTemplateFile);
    185 
    186                       /* this is a handler method for calls to CloseHandle() */
    187 BOOL    HMCloseHandle(HANDLE       hObject);
    188 
    189                          /* this is a handler method for calls to ReadFile() */
    190 BOOL    HMReadFile   (HANDLE       hFile,
    191                               LPCVOID      lpBuffer,
    192                               DWORD        nNumberOfBytesToRead,
    193                               LPDWORD      lpNumberOfBytesRead,
    194                               LPOVERLAPPED lpOverlapped);
    195 
    196                         /* this is a handler method for calls to WriteFile() */
    197 BOOL    HMWriteFile  (HANDLE       hFile,
    198                               LPCVOID      lpBuffer,
    199                               DWORD        nNumberOfBytesToWrite,
    200                               LPDWORD      lpNumberOfBytesWritten,
    201                               LPOVERLAPPED lpOverlapped);
    202 
    203                       /* this is a handler method for calls to GetFileType() */
    204 DWORD   HMGetFileType(HANDLE       hFile);
    205 
    206                               /* this is for special non-standard device I/O */
    207 DWORD   HMDeviceRequest (HANDLE hFile,
    208                                  ULONG  ulRequestCode,
    209                                  ULONG  arg1,
    210                                  ULONG  arg2,
    211                                  ULONG  arg3,
    212                                  ULONG  arg4);
    213116
    214117
     
    242145 *****************************************************************************/
    243146
     147// enable C linkage to avoid parameter mangling
     148#ifdef __cplusplus__
     149extern "C" {
     150#endif
     151
     152HFILE HMCreateFile(LPCSTR lpFileName,
     153                   DWORD  dwDesiredAccess,
     154                   DWORD  dwShareMode,
     155                   LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     156                   DWORD  dwCreationDisposition,
     157                   DWORD  dwFlagsAndAttributes,
     158                   HANDLE hTemplateFile);
     159
     160HANDLE HMOpenFile(LPCSTR    lpFileName,
     161                  OFSTRUCT* pOFStruct,
     162                  UINT      fuMode);
     163
     164BOOL HMCloseHandle(HANDLE hObject);
     165
     166BOOL HMReadFile(HANDLE       hFile,
     167                LPVOID       lpBuffer,
     168                DWORD        nNumberOfBytesToRead,
     169                LPDWORD      lpNumberOfBytesRead,
     170                LPOVERLAPPED lpOverlapped);
     171
     172BOOL HMWriteFile(HANDLE       hFile,
     173                 LPCVOID      lpBuffer,
     174                 DWORD        nNumberOfBytesToWrite,
     175                 LPDWORD      lpNumberOfBytesWritten,
     176                 LPOVERLAPPED lpOverlapped);
     177
     178DWORD HMGetFileType(HANDLE hFile);
     179
     180DWORD   HMDeviceRequest (HANDLE hFile,
     181                         ULONG  ulRequestCode,
     182                         ULONG  arg1,
     183                         ULONG  arg2,
     184                         ULONG  arg3,
     185                         ULONG  arg4);
     186
     187DWORD HMGetFileInformationByHandle (HANDLE                     hFile,
     188                                    BY_HANDLE_FILE_INFORMATION *pHFI);
     189
     190BOOL HMSetEndOfFile (HANDLE hFile);
     191
     192BOOL HMSetFileTime (HANDLE         hFile,
     193                    const FILETIME *pFT1,
     194                    const FILETIME *pFT2,
     195                    const FILETIME *pFT3);
     196
     197DWORD HMGetFileSize (HANDLE hFile,
     198                     PDWORD pSize);
     199
     200DWORD HMSetFilePointer (HANDLE hFile,
     201                        LONG   lDistanceToMove,
     202                        PLONG  lpDistanceToMoveHigh,
     203                        DWORD  dwMoveMethod);
     204
     205BOOL HMLockFile (HFILE         hFile,
     206                 DWORD         arg2,
     207                 DWORD         arg3,
     208                 DWORD         arg4,
     209                 DWORD         arg5);
     210
     211DWORD HMLockFileEx(HANDLE        hFile,
     212                   DWORD         dwFlags,
     213                   DWORD         dwReserved,
     214                   DWORD         nNumberOfBytesToLockLow,
     215                   DWORD         nNumberOfBytesToLockHigh,
     216                   LPOVERLAPPED  lpOverlapped);
     217
     218BOOL HMUnlockFile (HFILE         hFile,
     219                   DWORD         arg2,
     220                   DWORD         arg3,
     221                   DWORD         arg4,
     222                   DWORD         arg5);
     223
     224BOOL HMUnlockFileEx(HANDLE        hFile,
     225                    DWORD         dwFlags,
     226                    DWORD         dwReserved,
     227                    DWORD         nNumberOfBytesToLockLow,
     228                    DWORD         nNumberOfBytesToLockHigh,
     229                    LPOVERLAPPED  lpOverlapped);
     230
     231
     232#ifdef __cplusplus__
     233  }
     234#endif
    244235
    245236#endif /* _HANDLEMANAGER_H_ */
Note: See TracChangeset for help on using the changeset viewer.