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.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
smb64.c
Abstract:
This module implements thunking needed for the SMB MiniRDR
Author:
David Kruse [DKruse] 30-November 2000
Revision History:
--*/ #include "precomp.h"
#pragma hdrstop
PBYTE Smb64ThunkFileRenameInfo( IN PFILE_RENAME_INFORMATION pRenameInfo, IN OUT PULONG pBufferSize, OUT NTSTATUS* pStatus );
PBYTE Smb64ThunkRemoteLinkTrackingInfo( IN PBYTE pData, IN OUT PULONG BufferSize, OUT NTSTATUS* pStatus );
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, Smb64ThunkFileRenameInfo)
#pragma alloc_text(PAGE, Smb64ThunkRemoteLinkTrackingInfo)
#endif
PBYTE Smb64ThunkFileRenameInfo( IN PFILE_RENAME_INFORMATION pRenameInfo, IN OUT PULONG pBufferSize, OUT NTSTATUS* pStatus ) /*++
Routine Description:
This routine thunks the FILE_RENAME_INFORMATION structure IN PLACE. This means that the original buffer will no longer be intact after this call! (However, it requires no memory allocation either) Arguments:
RxContext - the RDBSS context
Return Value:
RXSTATUS - The return status for the operation
Notes:
Remoting of FSCTL's is permitted only to NT servers.
--*/ { PFILE_RENAME_INFORMATION32 pRenameInfo32;
if (*pBufferSize < pRenameInfo->FileNameLength + sizeof(FILE_RENAME_INFORMATION32)) { *pStatus = STATUS_BUFFER_OVERFLOW; return NULL; } // Allocate the new buffer
pRenameInfo32 = RxAllocatePoolWithTag( NonPagedPool, *pBufferSize, MRXSMB_MISC_POOLTAG ); if( !pRenameInfo32 ) { *pStatus = STATUS_INSUFFICIENT_RESOURCES; return NULL; }
// Copy the data into the new buffer
pRenameInfo32->ReplaceIfExists = pRenameInfo->ReplaceIfExists; pRenameInfo32->RootDirectory = *((PULONG)&pRenameInfo->RootDirectory); pRenameInfo32->FileNameLength = pRenameInfo->FileNameLength; RtlCopyMemory( &pRenameInfo32->FileName, &pRenameInfo->FileName, pRenameInfo->FileNameLength );
// Succeeded. Return
*pStatus = STATUS_SUCCESS; return (PBYTE)pRenameInfo32; }
PBYTE Smb64ThunkRemoteLinkTrackingInfo( IN PBYTE pData, IN OUT PULONG BufferSize, OUT NTSTATUS* pStatus ) /*++
Routine Description:
This routine handles all the FSCTL's
Arguments:
RxContext - the RDBSS context
Return Value:
RXSTATUS - The return status for the operation
Notes:
Remoting of FSCTL's is permitted only to NT servers.
--*/ { PREMOTE_LINK_TRACKING_INFORMATION pRemoteLink = (PREMOTE_LINK_TRACKING_INFORMATION)pData; PREMOTE_LINK_TRACKING_INFORMATION32 pRemoteLink32;
if (*BufferSize < pRemoteLink->TargetLinkTrackingInformationLength + FIELD_OFFSET(REMOTE_LINK_TRACKING_INFORMATION32, TargetLinkTrackingInformationBuffer)) { *pStatus = STATUS_BUFFER_OVERFLOW; return NULL; } // Allocate the new buffer
pRemoteLink32 = RxAllocatePoolWithTag( NonPagedPool, *BufferSize, MRXSMB_MISC_POOLTAG ); if( !pRemoteLink32 ) { *pStatus = STATUS_INSUFFICIENT_RESOURCES; return NULL; }
// Copy the data into the new buffer
pRemoteLink32->TargetFileObject = *((PULONG)&pRemoteLink->TargetFileObject); pRemoteLink32->TargetLinkTrackingInformationLength = pRemoteLink->TargetLinkTrackingInformationLength; RtlCopyMemory( &pRemoteLink32->TargetLinkTrackingInformationBuffer, &pRemoteLink->TargetLinkTrackingInformationBuffer, pRemoteLink->TargetLinkTrackingInformationLength );
// Succeeded. Return
*pStatus = STATUS_SUCCESS; return (PBYTE)pRemoteLink32; }
|