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.
|
|
/*****************************************************************************\
* MODULE: stream.cxx * * The module contains the stream interface for file and memory access * * Copyright (C) 1997-1998 Microsoft Corporation * * History: * 09/20/00 Weihaic Created * \*****************************************************************************/
#include "precomp.h"
#include "priv.h"
CStream::CStream (): m_dwCurPos (0), m_bValid(FALSE) { }
BOOL CStream::Reset ( VOID) { return SetPtr(0); } BOOL CStream::GetTotalSize ( PDWORD pdwSize) CONST { BOOL bRet = FALSE;
if (m_bValid && pdwSize) { *pdwSize = m_dwTotalSize;
bRet = TRUE; }
return bRet; } CMemStream::CMemStream ( PBYTE pMem, DWORD dwTotalSize): m_pMem (pMem) { m_dwTotalSize = dwTotalSize; m_bValid = TRUE; } BOOL CMemStream::SetPtr ( DWORD dwPos) { BOOL bRet = FALSE;
if (m_dwCurPos < m_dwTotalSize) { m_dwCurPos = dwPos; bRet = TRUE; }
return bRet; } BOOL CMemStream::Read ( PBYTE pBuf, DWORD dwBufSize, PDWORD pdwSizeRead) { DWORD dwSizeLeft = m_dwTotalSize - m_dwCurPos;
*pdwSizeRead = (dwSizeLeft > dwBufSize)?dwBufSize:dwSizeLeft;
CopyMemory (pBuf, m_pMem + m_dwCurPos, *pdwSizeRead);
return TRUE; }
CFileStream::CFileStream ( HANDLE hFile): m_hFile (hFile) { BOOL bRet = FALSE; LARGE_INTEGER LargeSize;
if (GetFileSizeEx (m_hFile, &LargeSize) && LargeSize.HighPart == 0) { m_dwTotalSize = LargeSize.LowPart; bRet = TRUE; } m_bValid = bRet; } BOOL CFileStream::SetPtr ( DWORD dwPos) { BOOL bRet = FALSE; LARGE_INTEGER LargePos;
LargePos.LowPart = dwPos; LargePos.HighPart = 0;
if (m_bValid) { if (SetFilePointerEx (m_hFile, LargePos, NULL, FILE_BEGIN)) { m_dwCurPos = dwPos; bRet = TRUE; } } return bRet; } BOOL CFileStream::Read ( PBYTE pBuf, DWORD dwBufSize, PDWORD pdwSizeRead) { BOOL bRet = FALSE; if (m_bValid) {
if (ReadFile (m_hFile, pBuf, dwBufSize, pdwSizeRead, NULL)) { m_dwCurPos+= *pdwSizeRead; bRet = TRUE; }
} return bRet; }
|