Source code of Windows XP (NT5)
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.

221 lines
3.6 KiB

  1. /*++
  2. Copyright (c) 2001 Microsoft Corporation
  3. Module Name:
  4. thunks.cpp
  5. Abstract:
  6. This file implements the API thunks for the BITS server extensions
  7. --*/
  8. #include "precomp.h"
  9. // API thunks
  10. UINT64 BITSGetFileSize(
  11. HANDLE Handle )
  12. {
  13. LARGE_INTEGER FileSize;
  14. if (!GetFileSizeEx( Handle, &FileSize ) )
  15. throw ServerException( HRESULT_FROM_WIN32( GetLastError() ) );
  16. return (UINT64)FileSize.QuadPart;
  17. }
  18. UINT64 BITSSetFilePointer(
  19. HANDLE Handle,
  20. INT64 Distance,
  21. DWORD MoveMethod )
  22. {
  23. LARGE_INTEGER DistanceToMove;
  24. DistanceToMove.QuadPart = (LONGLONG)Distance;
  25. LARGE_INTEGER NewFilePointer;
  26. BOOL Result =
  27. SetFilePointerEx(
  28. Handle,
  29. DistanceToMove,
  30. &NewFilePointer,
  31. MoveMethod );
  32. if ( !Result )
  33. {
  34. throw ServerException( HRESULT_FROM_WIN32( GetLastError() ) );
  35. }
  36. return (UINT64)NewFilePointer.QuadPart;
  37. }
  38. DWORD
  39. BITSWriteFile(
  40. HANDLE Handle,
  41. LPCVOID Buffer,
  42. DWORD NumberOfBytesToWrite)
  43. {
  44. DWORD BytesWritten;
  45. BOOL Result =
  46. WriteFile(
  47. Handle,
  48. Buffer,
  49. NumberOfBytesToWrite,
  50. &BytesWritten,
  51. NULL );
  52. if ( !Result )
  53. throw ServerException( HRESULT_FROM_WIN32( GetLastError() ) );
  54. return BytesWritten;
  55. }
  56. void
  57. BITSCreateDirectory(
  58. LPCTSTR DirectoryName
  59. )
  60. {
  61. BOOL Result =
  62. CreateDirectory( DirectoryName, NULL );
  63. if ( Result )
  64. return;
  65. DWORD Status = GetLastError();
  66. // ignore the error if the directory already exists
  67. if ( ERROR_ALREADY_EXISTS == Status )
  68. return;
  69. throw ServerException( HRESULT_FROM_WIN32( Status ) );
  70. }
  71. void
  72. BITSRenameFile(
  73. LPCTSTR ExistingName,
  74. LPCTSTR NewName )
  75. {
  76. BOOL Result =
  77. MoveFileEx( ExistingName, NewName, MOVEFILE_REPLACE_EXISTING );
  78. if ( !Result )
  79. throw ServerException( HRESULT_FROM_WIN32( GetLastError() ) );
  80. }
  81. void
  82. BITSDeleteFile(
  83. LPCTSTR FileName )
  84. {
  85. BOOL Result =
  86. DeleteFile( FileName );
  87. if ( Result )
  88. return;
  89. DWORD Status = GetLastError();
  90. if ( ERROR_FILE_NOT_FOUND == Status ||
  91. ERROR_PATH_NOT_FOUND == Status )
  92. return;
  93. throw ServerException( HRESULT_FROM_WIN32( GetLastError() ) );
  94. }
  95. GUID
  96. BITSCreateGuid()
  97. {
  98. GUID guid;
  99. HRESULT Hr = CoCreateGuid( &guid );
  100. if ( FAILED( Hr ) )
  101. throw ServerException( Hr );
  102. return guid;
  103. }
  104. GUID
  105. BITSGuidFromString( const char *String )
  106. {
  107. // 38 chars {c200e360-38c5-11ce-ae62-08002b2b79ef}
  108. if ( 38 != strlen( String ) )
  109. throw ServerException( E_INVALIDARG );
  110. WCHAR StringW[ 80 ];
  111. StringCbPrintfW(
  112. StringW,
  113. sizeof( StringW ),
  114. L"%S",
  115. String );
  116. GUID Guid;
  117. HRESULT Hr =
  118. IIDFromString( StringW, &Guid );
  119. if ( FAILED( Hr ) )
  120. throw ServerException( Hr );
  121. return Guid;
  122. }
  123. StringHandle
  124. BITSStringFromGuid(
  125. GUID Guid )
  126. {
  127. WCHAR StringW[ 80 ];
  128. StringFromGUID2( Guid, StringW, 80 );
  129. StringHandle WorkString;
  130. char *WorkBuffer = WorkString.AllocBuffer( 80 );
  131. StringCbPrintfA(
  132. WorkBuffer,
  133. sizeof( StringW ),
  134. "%S",
  135. StringW );
  136. WorkString.SetStringSize();
  137. return WorkString;
  138. }
  139. void
  140. BITSSetCurrentThreadToken(
  141. HANDLE hToken )
  142. {
  143. if ( !SetThreadToken( NULL, hToken ) )
  144. {
  145. for( unsigned int i = 0; i < 100; i ++ )
  146. {
  147. Sleep( 10 );
  148. if ( SetThreadToken( NULL, hToken ) )
  149. return;
  150. }
  151. ASSERT( 0 );
  152. TerminateProcess( NULL, GetLastError() );
  153. }
  154. }