utldrv.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:4k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. //
  2. // Copyright (c) Microsoft Corporation.  All rights reserved.
  3. //
  4. //
  5. // Use of this source code is subject to the terms of the Microsoft end-user
  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. // If you did not accept the terms of the EULA, you are not authorized to use
  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. // install media.
  10. //
  11. /*++
  12. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  13. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  14. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  15. PARTICULAR PURPOSE.
  16. Module Name:
  17.     utldrv.h
  18. Abstract:
  19.    Private header file. Defines the data structure for utility driver
  20. Functions:
  21. Notes:
  22. --*/
  23. #ifndef _UTLDRV_H_
  24. #define _UTLDRV_H_
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif // __cplusplus
  28. //  call back function definition
  29. typedef VOID (*PFN_PowerOnCallback)(void);
  30. //  
  31. //  Driver to driver fast call context
  32. //
  33. /*
  34. pContext is the UTLDRV driver context returned from CreateFile(L"UTL0:", ...) call.
  35.  
  36.  DWORD GetRegisterVA(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD *pPVA);
  37.    
  38.     This function helps drivers to get the virtual address for the CPU registers they 
  39.     specified. 
  40.         dwAddr  :   is the address of the register you want to get virtual address. Depending
  41.                     on the bPA flag, it could be the K-Mode virtuall address or physical
  42.                     address. 
  43.         dwSize  :   Size of the memory.
  44.         bPA     :   TRUE if the dwAddr is physical address. FALSE if it is K-Mode virtual 
  45.                     address. 
  46.         pVA     :   is the pointer to the process virtual address you want to use in your driver.
  47.         Return Value: ERROR_SUCCESS if it is succeeds.
  48.         
  49. DWORD GetMemVA(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD dwFlags, DWORD *pVA);
  50.     This function helps drivers to get the virtual address for the specified SDRAM.
  51.         dwAddr  :   the address for the SDRAM you want to get virtual address. Depending on
  52.                     the bPA flag, it could be the K-Mode virtual address or physical address.
  53.         dwSize  :   size of the memory
  54.         bPA     :   TRUE if the dwAddr is physical addresss. FALSE if it is K-Mode virtual
  55.                     address.
  56.         dwFlags :   Memory flags as you would pass to VirtualCopy. 
  57.         pVA     :   pointer to the process virtual address you requested.
  58.         Return Value: ERROR_SUCCESS if it is succeeds.
  59.         
  60. DWORD FreeMemVA(PVOID pContext, DWORD pVA);
  61.     This function frees the allocated process virtual memory. 
  62.     
  63.         pVA     :   this is the process virtual memory returned by GetMemVA function call.
  64.         
  65. (*) For registers, UTLDRV won't free the virtual address until UTLDRV itself exits.  
  66. typedef VOID (*PFN_PowerOnCallback)(void);
  67. 4. DWORD RegisterStorageDrv(PVOID pContext, PFN_PowerOnCallback pfnCallback);
  68.     This function registers the block driver to the UTL driver for PowerOn notification.
  69.         pfnCallback: the callback function for UTLDRV to call when we come back from PowerOff. 
  70.         Return Value: 0xFFFFFFFF if the function failed. Use GetLastError() for error code.
  71.                       Otherwise, it returns an ID which can be used to call UnRegisterStorageDrv
  72.                       function.
  73. 5. VOID UnRegisterStorageDrv(PVOID pContext, PFN_PowerOnCallback pfnCallback);
  74.     This function un-registers the blcok driver from the UTL driver. 
  75.  */
  76. typedef struct _UTL_FASTCALL {
  77.     PVOID   pContext;
  78.     DWORD   (*GetRegisterVA)(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD *pPVA);
  79.     DWORD   (*GetMemVA)(PVOID pContext, DWORD dwAddr, DWORD dwSize, BOOL bPA, DWORD dwFlags, DWORD *pPVA);
  80.     DWORD   (*FreeMemVA)(PVOID pContext, DWORD pPVA);
  81.     DWORD   (*RegisterBlockDrv)(PVOID pContext, PFN_PowerOnCallback);
  82.     DWORD   (*UnRegisterBlockDrv)(PVOID pContext, PFN_PowerOnCallback);
  83. } UTL_FASTCALL, *PUTL_FASTCALL;
  84. //
  85. //  Utility Ioctl
  86. //
  87. #define FILE_DEVICE_UTL FILE_DEVICE_CONTROLLER
  88. //  OUT: UTL_FASTCALL
  89. #define IOCTL_UTL_GET_FASTCALL  
  90.     CTL_CODE(FILE_DEVICE_UTL, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
  91. #ifdef __cplusplus
  92. }
  93. #endif // __cplusplus
  94. #endif // _UTLDRV_H_