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.

205 lines
6.3 KiB

  1. /*++
  2. Copyright (c) 1991-92 Microsoft Corporation
  3. Module Name:
  4. ConvWks.c
  5. Abstract:
  6. 32 bit version of mapping routines for NetWkstaGet/SetInfo API
  7. Author:
  8. Dan Hinsley (danhi) 06-Jun-1991
  9. Environment:
  10. User Mode - Win32
  11. Revision History:
  12. 24-Apr-1991 danhi
  13. Created
  14. 06-Jun-1991 Danhi
  15. Sweep to conform to NT coding style
  16. 18-Aug-1991 JohnRo
  17. Implement downlevel NetWksta APIs. (Moved DanHi's NetCmd/Map32/MWksta
  18. conversion stuff to NetLib.)
  19. Got rid of _DH hacks.
  20. Changed to use NET_API_STATUS.
  21. Started changing to UNICODE.
  22. 21-Nov-1991 JohnRo
  23. Removed NT dependencies to reduce recompiles.
  24. 03-Apr-1992 JohnRo
  25. Fixed heuristics field, which caused binding cache UNICODE problems.
  26. --*/
  27. //
  28. // INCLUDES
  29. //
  30. // These must be included first:
  31. #include <windef.h> // IN, LPVOID, etc.
  32. #include <lmcons.h> // NET_API_STATUS, CNLEN, etc.
  33. // These may be included in any order:
  34. #include <debuglib.h> // IF_DEBUG(CONVWKS).
  35. #include <dlwksta.h> // Old info levels, MAX_ equates, my prototypes.
  36. #include <lmapibuf.h> // NetapipBufferAllocate().
  37. #include <lmerr.h> // NERR_ and ERROR_ equates.
  38. #include <lmwksta.h> // New info level structures.
  39. #include <mapsupp.h> // NetpMoveStrings().
  40. #include <netdebug.h> // NetpAssert(), etc.
  41. #include <netlib.h> // NetpPointerPlusSomeBytes().
  42. #include <tstring.h> // STRLEN().
  43. #define Nullstrlen(psz) ((psz) ? STRLEN(psz)+1 : 0)
  44. // Note: MOVESTRING structures (NetpWksta0_101, etc) are declared in DLWksta.h
  45. // and initialized in NetLib/MapData.c.
  46. NET_API_STATUS
  47. NetpConvertWkstaInfo (
  48. IN DWORD FromLevel,
  49. IN LPVOID FromInfo,
  50. IN BOOL FromNative,
  51. IN DWORD ToLevel,
  52. OUT LPVOID ToInfo,
  53. IN DWORD ToFixedSize,
  54. IN DWORD ToStringSize,
  55. IN BOOL ToNative,
  56. IN OUT LPTSTR * ToStringTopPtr OPTIONAL
  57. )
  58. {
  59. BOOL CopyOK;
  60. LPBYTE ToFixedEnd;
  61. // DWORD ToInfoSize;
  62. LPTSTR ToStringTop;
  63. NetpAssert(FromNative);
  64. NetpAssert(ToNative);
  65. // Set up pointers for use by NetpCopyStringsToBuffer.
  66. if (ToStringTopPtr != NULL) {
  67. ToStringTop = *ToStringTopPtr;
  68. } else {
  69. ToStringTop = (LPTSTR)
  70. NetpPointerPlusSomeBytes(ToInfo, ToFixedSize+ToStringSize);
  71. }
  72. // ToInfoSize = ToFixedSize + ToStringSize;
  73. ToFixedEnd = NetpPointerPlusSomeBytes(ToInfo, ToFixedSize);
  74. #define COPY_STRING( InLevel, InField, OutLevel, OutField ) \
  75. { \
  76. NetpAssert( dest != NULL); \
  77. NetpAssert( src != NULL); \
  78. NetpAssert( (src -> wki##InLevel##_##InField) != NULL); \
  79. CopyOK = NetpCopyStringToBuffer ( \
  80. src->wki##InLevel##_##InField, \
  81. STRLEN(src->wki##InLevel##_##InField), \
  82. ToFixedEnd, \
  83. & ToStringTop, \
  84. & dest->wki##OutLevel##_##OutField); \
  85. NetpAssert(CopyOK); \
  86. }
  87. switch (ToLevel) {
  88. case 102 :
  89. {
  90. LPWKSTA_INFO_102 dest = ToInfo;
  91. // LPWKSTA_INFO_1 src = FromInfo;
  92. NetpAssert( (FromLevel == 0) || (FromLevel == 1) );
  93. dest->wki102_logged_on_users = 1;
  94. }
  95. /* FALLTHROUGH */ // Level 101 is subset of level 102.
  96. case 101 :
  97. {
  98. LPWKSTA_INFO_101 dest = ToInfo;
  99. LPWKSTA_INFO_0 src = FromInfo;
  100. NetpAssert( (FromLevel == 0) || (FromLevel == 1) );
  101. COPY_STRING(0, root, 101, lanroot);
  102. }
  103. /* FALLTHROUGH */ // Level 100 is subset of level 101.
  104. case 100 :
  105. {
  106. LPWKSTA_INFO_100 dest = ToInfo;
  107. dest->wki100_platform_id = PLATFORM_ID_OS2;
  108. if (FromLevel == 10) {
  109. LPWKSTA_INFO_10 src = FromInfo;
  110. COPY_STRING(10, computername, 100, computername);
  111. COPY_STRING(10, langroup, 100, langroup);
  112. dest->wki100_ver_major = src->wki10_ver_major;
  113. dest->wki100_ver_minor = src->wki10_ver_minor;
  114. } else if ( (FromLevel == 0) || (FromLevel == 1) ) {
  115. LPWKSTA_INFO_1 src = FromInfo;
  116. COPY_STRING(1, computername, 100, computername);
  117. COPY_STRING(1, langroup, 100, langroup);
  118. dest->wki100_ver_major = src->wki1_ver_major;
  119. dest->wki100_ver_minor = src->wki1_ver_minor;
  120. } else {
  121. NetpAssert( FALSE );
  122. }
  123. }
  124. break;
  125. case 402 :
  126. {
  127. LPWKSTA_INFO_402 dest = ToInfo;
  128. LPWKSTA_INFO_1 src = FromInfo;
  129. NetpAssert( FromLevel == 1 );
  130. dest->wki402_char_wait = src->wki1_charwait;
  131. dest->wki402_collection_time = src->wki1_chartime;
  132. dest->wki402_maximum_collection_count = src->wki1_charcount;
  133. dest->wki402_keep_conn = src->wki1_keepconn;
  134. dest->wki402_keep_search = src->wki1_keepsearch;
  135. dest->wki402_max_cmds = src->wki1_maxcmds;
  136. dest->wki402_num_work_buf = src->wki1_numworkbuf;
  137. dest->wki402_siz_work_buf = src->wki1_sizworkbuf;
  138. dest->wki402_max_wrk_cache = src->wki1_maxwrkcache;
  139. dest->wki402_sess_timeout = src->wki1_sesstimeout;
  140. dest->wki402_siz_error = src->wki1_sizerror;
  141. dest->wki402_num_alerts = src->wki1_numalerts;
  142. dest->wki402_num_services = src->wki1_numservices;
  143. dest->wki402_errlog_sz = src->wki1_errlogsz;
  144. dest->wki402_print_buf_time = src->wki1_printbuftime;
  145. dest->wki402_num_char_buf = src->wki1_numcharbuf;
  146. dest->wki402_siz_char_buf = src->wki1_sizcharbuf;
  147. COPY_STRING(1, wrkheuristics, 402, wrk_heuristics);
  148. dest->wki402_mailslots = src->wki1_mailslots;
  149. dest->wki402_num_dgram_buf = src->wki1_numdgrambuf;
  150. dest->wki402_max_threads = src->wki1_maxthreads;
  151. }
  152. break;
  153. default :
  154. NetpAssert( FALSE );
  155. return (ERROR_INVALID_LEVEL);
  156. }
  157. return (NERR_Success);
  158. } // NetpConvertWkstaInfo