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) 1998, Microsoft Corp. All rights reserved.
//
// FILE
//
// propcmd.cpp
//
// SYNOPSIS
//
// This file defines commands for manipulating the Objects table.
//
// MODIFICATION HISTORY
//
// 02/20/1998 Original version.
// 04/03/1998 Bind integers as DBTYPE_I4.
// 02/15/1999 Make commands MT safe.
// 02/19/1999 Added definition of CommandBase::Execute
// 05/30/2000 Add trace support.
//
///////////////////////////////////////////////////////////////////////////////
#include <ias.h>
#include <propcmd.h>
void GetBag::execute(ULONG bagKey, PropertyBag& output) { _serialize
bag = bagKey;
Rowset rowset;
CommandBase::execute(__uuidof(IRowset), (IUnknown**)&rowset);
// Iterate through the rowset and insert the properties into the bag.
while (rowset.moveNext()) { rowset.getData(readAccess, this);
// Make a variant from the row data.
_variant_t v(value);
// Convert it to the appropriate type.
v.ChangeType(type);
// Add it to the PropertyBag
output.appendValue(name, &v); } }
void SetBag::execute(ULONG bagKey, PropertyBag& input) { _serialize
bag = bagKey;
PropertyBag::const_iterator i;
// Iterate through all the properties.
for (i = input.begin(); i != input.end(); ++i) { // Store the property name.
wcsncpy(name, i->first, sizeof(name)/sizeof(WCHAR));
PropertyValue::const_iterator j;
// Iterate through all the values.
for (j = i->second.begin(); j != i->second.end(); ++j) { // Set the type.
type = V_VT(j);
// Copy the value VARIANT.
_variant_t v(*j);
// Convert it to a BSTR.
v.ChangeType(VT_BSTR);
// Copy it into the parameter buffer.
if (wcslen(V_BSTR(&v)) >= sizeof(value)/sizeof(WCHAR)) { // Too big. Throw an exception.
_com_issue_error(E_INVALIDARG); } else { wcscpy(value, V_BSTR(&v)); }
// Load the row data into the table.
CommandBase::execute(); } } }
void CommandBase::execute(REFIID refiid, IUnknown** result) { CheckOleDBError( "ICommand::Execute", command->Execute(NULL, refiid, &dbParams, NULL, result) ); }
|