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.
|
|
//-----------------------------------------------------------------------------
//
//
// File: dsnbuff
//
// Description: Header file for CDSNBuffer. Class used to abstract writting
// DSN buffers to P2 file.
//
// Author: Mike Swafford (MikeSwa)
//
// History:
// 7/3/98 - MikeSwa Created
//
// Copyright (C) 1998 Microsoft Corporation
//
//-----------------------------------------------------------------------------
#ifndef __DSNBUFF_H__
#define __DSNBUFF_H__
#include <windows.h>
#include <dbgtrace.h>
#include "filehc.h"
#include "dsnconv.h"
#define DSN_BUFFER_SIG 'BNSD'
#define DSN_BUFFER_SIZE 1000
class CDSNBuffer { public: DWORD m_dwSignature; OVERLAPPED m_overlapped; DWORD m_cbOffset; DWORD m_cbFileSize; DWORD m_cFileWrites; PFIO_CONTEXT m_pDestFile; BYTE m_pbFileBuffer[DSN_BUFFER_SIZE];
CDSNBuffer(); ~CDSNBuffer(); HRESULT HrInitialize(PFIO_CONTEXT hDestFile); HRESULT HrWriteBuffer(BYTE *pbInputBuffer, DWORD cbInputBuffer); HRESULT HrWriteModifiedUnicodeString(LPWSTR pwszString); HRESULT HrFlushBuffer(OUT DWORD *pcbFileSize); HRESULT HrSeekForward(IN DWORD cbBytesToSeek, OUT DWORD *pcbFileSize);
//Used to set (and reset) custom conversion contexts. This feature was
//designed explitily for UTF7 encoding of DSN content, but could also
//be used to enforce:
// - RFC822 header formats
// - RFC822 content restricts
void SetConversionContext(CResourceConversionContext *presconv) { _ASSERT(presconv); m_presconv = presconv; } //Used to reset to the defaut memcopy
void ResetConversionContext() {m_presconv = &m_defconv;}; HRESULT HrWriteResource(WORD wResourceId, LANGID LangId);
//Encapsulates the functionality of (the nonexistant) LoadStringEx
HRESULT HrLoadResourceString(WORD wResourceId, LANGID LangId, LPWSTR *pwszResource, DWORD *pcbResource); protected: CDefaultResourceConversionContext m_defconv; CResourceConversionContext *m_presconv; HRESULT HrPrivWriteBuffer(BOOL fASCII, BYTE *pbInputBuffer, DWORD cbInputBuffer); HRESULT HrWriteBufferToFile(); };
//---[ CDSNBuffer::CDSNBuffer ]------------------------------------------------
//
//
// Description:
// Inlined default constructor for CDSNBuffer
// Parameters:
// -
// Returns:
// -
// History:
// 7/3/98 - MikeSwa Created
//
//-----------------------------------------------------------------------------
inline CDSNBuffer::CDSNBuffer() { m_dwSignature = DSN_BUFFER_SIG; m_overlapped.Offset = 0; m_overlapped.OffsetHigh = 0; m_overlapped.hEvent = NULL; m_cbOffset = 0; m_cbFileSize = 0; m_cFileWrites = 0; m_pDestFile = NULL; m_presconv = &m_defconv; }
//---[ CDSNBuffer::HrFlushBuffer ]---------------------------------------------
//
//
// Description:
// Flushes remaining buffers to File and returns the total number of bytes
// written to the file.
// Parameters:
// OUT pcbFileSize The size (in bytes) of the file written
// Returns:
// S_OK on success
// History:
// 7/3/98 - MikeSwa Created
//
//-----------------------------------------------------------------------------
inline HRESULT CDSNBuffer::HrFlushBuffer(OUT DWORD *pcbFileSize) { HRESULT hr = HrWriteBufferToFile();
_ASSERT(pcbFileSize); *pcbFileSize = m_cbFileSize; return hr; }
#endif //__DSNBUFF_H__
|