Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
6.1 KiB

  1. /*++
  2. 1998 Seagate Software, Inc. All rights reserved
  3. Module Name:
  4. wsbfile.cpp
  5. Abstract:
  6. This file implements the common Wsb routines dealing with file operations.
  7. Author:
  8. Christopher J. Timmes [ctimmes@avail.com] 23 Jun 1997
  9. Revision History:
  10. Christopher J. Timmes [ctimmes@avail.com] 21 July 1997
  11. - modified function WsbCalcCRCofFile(). Added NT system calls
  12. NTQueryInformationFile and NTSetInformationFile so as to preserve the
  13. input file's timestamp. Until this change this function updated the
  14. file's Date Last Accessed.
  15. Christopher J. Timmes [ctimmes@avail.com] 05 August 1997
  16. - modified function WsbCalcCRCofFile(). Added doFileRead() function, an
  17. extra 'mode' parameter and supporting code to enable WsbCalcCRCofFile()
  18. to support 4 different combinations (modes) of file open and read:
  19. a normal open and sync read, a 'no recall' open and sync read, a 'norecall'
  20. open and async read, and a 'norecall' open and memory-mapped 'read'.
  21. Shawn L. Kaczmarek 15 September 1997
  22. - First set of modifications to 'back out' the file IO wrapper to the CRC
  23. routine. The tsterror.h is now 'out' as well.
  24. Shawn L. Kaczmarek 16 Sept 1997
  25. Moved WsbCalcCRCofFile() and doFileRead() to the item commander class
  26. in hsmivrfy.cpp ( hsmicmdr.h ). These methods provided the file IO wrappers
  27. for the CRC method which is retained in here. The CRC look up table is
  28. externed with an instantiation in the RsCommon.dll.
  29. Shawn L. Kaczmarek 17 Sept 1997
  30. Removed a doFileRead() prototype that remained from prior 'move out' of
  31. functions.
  32. --*/
  33. #include "stdafx.h" // req'd first: common includes
  34. // (including wsb.h, rqd for this)
  35. // (wsb.h includes wsbfile,h, this file's hdr)
  36. // 32-bit CRC table values (256 entries)
  37. unsigned long crc_32_tab[] =
  38. { /* CRC polynomial 0xedb88320 */
  39. 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
  40. 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
  41. 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
  42. 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
  43. 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
  44. 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
  45. 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
  46. 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
  47. 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
  48. 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
  49. 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
  50. 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
  51. 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
  52. 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
  53. 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
  54. 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
  55. 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
  56. 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
  57. 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
  58. 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
  59. 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
  60. 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
  61. 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
  62. 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
  63. 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
  64. 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
  65. 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
  66. 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
  67. 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
  68. 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
  69. 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
  70. 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
  71. 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
  72. 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
  73. 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
  74. 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
  75. 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
  76. 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
  77. 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
  78. 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
  79. 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
  80. 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
  81. 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
  82. };
  83. HRESULT
  84. WsbCRCReadFile (
  85. IN BYTE* pchCurrent,
  86. IN OUT ULONG* oldcrc32
  87. )
  88. /*
  89. Routine Description:
  90. This routine exists so that any read excpetions triggered by accessing invalid memory
  91. can be properly caught.
  92. */
  93. {
  94. HRESULT hr = S_OK;
  95. // This call can caused an invalid page to be accessed, so it needs to
  96. // be done within an exception handling block. It uses different exception handling,
  97. // so it can not be used in a function with normal try - catch blocks.
  98. __try {
  99. // call CRC algorythm, pass in current byte and present CRC value
  100. CALC_CRC( *pchCurrent, *oldcrc32);
  101. } __except (EXCEPTION_EXECUTE_HANDLER) {
  102. hr = HRESULT_FROM_WIN32(GetExceptionCode()); \
  103. }
  104. return(hr);
  105. }