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.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
data.cpp
Abstract:
Contains registry "Data" abstraction implementation Author:
Mike Cirello Vijay Jayaseelan (vijayj)
Revision History:
03 March 2001 : Rewamp the whole source to make it more maintainable (particularly readable) --*/
#include "Data.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//
// this class basically converts these variable types to a BYTE pointer
// so the info can be stored in the registry
//
// Arguments:
// b - data in BYTE stream. OPTIONAL
// d - data as a DWORD. OPTIONAL
// t - data in TCHAR stream. OPTIONAL
// flag - which data type is valid?
// bSize - if data is in BYTE stream this must have the length of the stream.
//
Data::Data( IN PBYTE b, IN DWORD d, IN PCTSTR t, IN DWORD flag, IN int bSize) { DWORD fourthbyte = 4278190080; DWORD thirdbyte = 16711680; DWORD secondbyte = 65280; DWORD firstbyte = 255; PCTSTR ptr;
pByte = b; dword = d; pTchar = t; nFlags = flag; size = -1;
switch (nFlags) { case (1): size = bSize; break;
case (2): if ( pByte = new BYTE[4] ){ size = 4; pByte[3] = (BYTE)((dword & fourthbyte) >> 24); pByte[2] = (BYTE)((dword & thirdbyte) >> 16); pByte[1] = (BYTE)((dword & secondbyte) >> 8); pByte[0] = (BYTE)(dword & firstbyte); } break; case (4): size = wcslen(t)+1; ptr = t+size; while(*ptr!='\0') { size += wcslen(ptr)+1; ptr = t+size; } size *= 2; size += 2;
case (3): if (size == -1) { size = (wcslen(t)*2)+2; } if ( pByte = new BYTE[size] ) { for (int x=0;x<((size/2)-1);x++) { pByte[x*2] = (BYTE)(pTchar[x] & firstbyte); pByte[1+(x*2)] = (BYTE)((pTchar[x] & secondbyte) >> 8); } pByte[size-1] = pByte[size-2] = '\0'; } break;
default: break; } }
|