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.

158 lines
3.0 KiB

  1. /*++
  2. Copyright (C) Microsoft Corporation, 1999 - 1999
  3. Module Name:
  4. Conversion
  5. Abstract:
  6. This header file describes the format conversion services.
  7. Author:
  8. Doug Barlow (dbarlow) 6/21/1999
  9. Remarks:
  10. Notes:
  11. --*/
  12. #ifndef _CONVERSION_H_
  13. #define _CONVERSION_H_
  14. #include <winscard.h>
  15. #include <scardlib.h>
  16. #define APDU_EXTENDED_LENGTH 0x01 // Force an extended value for Lc and/or Le
  17. #define APDU_MAXIMUM_LE 0x02 // Request the maximum Le value
  18. #define APDU_REQNAD_VALID 0x04 // The Request NaD is valid.
  19. #define APDU_RSPNAD_VALID 0x08 // The Response NaD is valid.
  20. #define APDU_NO_GET_RESPONSE 0x10 // Don't do automatic Get Responses
  21. #define APDU_ALTCLA_VALID 0x20 // The Alternate CLA is valid.
  22. extern void
  23. ConstructRequest(
  24. IN BYTE bCla,
  25. IN BYTE bIns,
  26. IN BYTE bP1,
  27. IN BYTE bP2,
  28. IN CBuffer &bfData,
  29. IN WORD wLe,
  30. IN DWORD dwFlags,
  31. OUT CBuffer &bfApdu);
  32. extern void
  33. ParseRequest(
  34. IN LPCBYTE pbApdu,
  35. IN DWORD cbApdu,
  36. OUT LPBYTE pbCla,
  37. OUT LPBYTE pbIns,
  38. OUT LPBYTE pbP1,
  39. OUT LPBYTE pbP2,
  40. OUT LPCBYTE *pbfData,
  41. OUT LPWORD pwLc,
  42. OUT LPWORD pwLe,
  43. OUT LPDWORD pdwFlags);
  44. extern void
  45. ParseReply(
  46. IN CBuffer &bfApdu,
  47. OUT LPBYTE pbSW1,
  48. OUT LPBYTE pbSW2);
  49. extern void
  50. MultiStringToSafeArray(
  51. IN LPCTSTR msz,
  52. IN OUT SAFEARRAY **pprgsz);
  53. extern void
  54. GuidArrayToSafeArray(
  55. IN LPCGUID pGuids,
  56. IN DWORD cguids,
  57. IN OUT SAFEARRAY **pprgguids);
  58. extern void
  59. SafeArrayToGuidArray(
  60. IN LPSAFEARRAY prgGuids,
  61. OUT CBuffer &bfGuids,
  62. OUT LPDWORD pcGuids);
  63. extern void
  64. SafeArrayToGuidArray(
  65. IN LPSAFEARRAY prgGuids,
  66. OUT CBuffer &bfGuids,
  67. OUT LPDWORD pcGuids);
  68. extern void
  69. SafeArrayToMultiString(
  70. IN LPSAFEARRAY prgsz,
  71. IN OUT CTextMultistring &msz);
  72. extern void
  73. ApduToTpdu_T0(
  74. IN SCARDHANDLE hCard,
  75. IN const SCARD_IO_REQUEST *pPciRqst,
  76. IN LPCBYTE pbApdu,
  77. IN DWORD cbApdu,
  78. IN DWORD dwFlags,
  79. OUT CBuffer bfPciRsp,
  80. OUT CBuffer &bfReply,
  81. IN LPCBYTE pbAltCla);
  82. extern void
  83. ApduToTpdu_T1(
  84. IN SCARDHANDLE hCard,
  85. IN const SCARD_IO_REQUEST *pPciRqst,
  86. IN LPCBYTE pbApdu,
  87. IN DWORD cbApdu,
  88. IN DWORD dwFlags,
  89. OUT CBuffer bfPciRsp,
  90. OUT CBuffer &bfReply);
  91. extern LONG
  92. ByteBufferToBuffer(
  93. IN LPBYTEBUFFER pby,
  94. OUT CBuffer &bf);
  95. extern LONG
  96. BufferToByteBuffer(
  97. IN CBuffer &bf,
  98. OUT LPBYTEBUFFER *ppby);
  99. //
  100. // NOTE
  101. //
  102. // The following inline routines assume a little endian architecture,
  103. // and must be changed for other platforms.
  104. //
  105. inline WORD
  106. NetToLocal(
  107. IN LPCBYTE pb)
  108. {
  109. return (pb[0] << 8) + pb[1];
  110. }
  111. inline void
  112. LocalToNet(
  113. OUT LPBYTE pb,
  114. IN WORD w)
  115. {
  116. pb[0] = (BYTE)((w >> 8) & 0xff);
  117. pb[1] = (BYTE)(w & 0xff);
  118. }
  119. inline BYTE
  120. LeastSignificantByte(
  121. IN WORD w)
  122. {
  123. return (BYTE)(w & 0xff);
  124. }
  125. #endif // _CONVERSION_H_