mirror of https://github.com/lianthony/NT4.0
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.
122 lines
2.8 KiB
122 lines
2.8 KiB
/*++
|
|
|
|
Copyright (c) 1989-1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
initprop.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the initialization user FsCtls for the Ntfs Property
|
|
support.
|
|
|
|
|
|
--*/
|
|
|
|
#include <viewprop.h> // needs propset.h and ntfsprop.h
|
|
|
|
#define Dbg DEBUG_TRACE_PROP_FSCTL
|
|
|
|
|
|
VOID
|
|
InitializePropertyData (
|
|
IN PPROPERTY_CONTEXT Context
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine initializes a blank stream for property access.
|
|
|
|
We set up the initial size, lay out an empty table and empty header.
|
|
|
|
|
|
Arguments:
|
|
|
|
Context - Property Context for the call
|
|
|
|
Return Value:
|
|
|
|
Nothing
|
|
|
|
--*/
|
|
{
|
|
PROPERTY_SET_HEADER PropertySetHeader;
|
|
PROPERTY_ID_TABLE IdTable;
|
|
PROPERTY_HEAP_HEADER HeapHeader;
|
|
|
|
//
|
|
// Set up header
|
|
//
|
|
|
|
PropertySetHeader.wByteOrder = 0xFFFE;
|
|
PropertySetHeader.wFormat = PSH_FORMAT_VERSION;
|
|
PropertySetHeader.dwOSVer = PSH_DWOSVER;
|
|
RtlZeroMemory( &PropertySetHeader.clsid, sizeof( CLSID ));
|
|
PropertySetHeader.reserved = 2; // BUGBUG ???
|
|
PropertySetHeader.IdTableOffset = LongAlign( sizeof( PROPERTY_SET_HEADER ));
|
|
PropertySetHeader.ValueHeapOffset = PropertySetHeader.IdTableOffset;
|
|
|
|
//
|
|
// Set up Id table
|
|
//
|
|
|
|
IdTable.PropertyCount = 0;
|
|
IdTable.MaximumPropertyCount = PIT_PROPERTY_DELTA;
|
|
PropertySetHeader.ValueHeapOffset +=
|
|
LongAlign( PROPERTY_ID_TABLE_SIZE( PIT_PROPERTY_DELTA ));
|
|
|
|
//
|
|
// Set up Heap header
|
|
//
|
|
|
|
HeapHeader.PropertyHeapLength = PHH_INITIAL_SIZE;
|
|
HeapHeader.PropertyHeapEntry[0].PropertyValueLength = PHH_INITIAL_SIZE - PROPERTY_HEAP_HEADER_SIZE;
|
|
HeapHeader.PropertyHeapEntry[0].PropertyId = PID_ILLEGAL;
|
|
HeapHeader.PropertyHeapEntry[0].PropertyNameLength = 0;
|
|
|
|
//
|
|
// Set the new size of the stream
|
|
//
|
|
|
|
NtOfsSetLength( Context->IrpContext, Context->Attribute,
|
|
PropertySetHeader.ValueHeapOffset + PHH_INITIAL_SIZE );
|
|
|
|
|
|
//
|
|
// Write out the header
|
|
//
|
|
|
|
LogFileFullFailCheck( Context->IrpContext );
|
|
NtOfsPutData( Context->IrpContext,
|
|
Context->Attribute,
|
|
0,
|
|
sizeof( PROPERTY_SET_HEADER ),
|
|
&PropertySetHeader );
|
|
|
|
|
|
//
|
|
// Write out the table
|
|
//
|
|
|
|
LogFileFullFailCheck( Context->IrpContext );
|
|
NtOfsPutData( Context->IrpContext,
|
|
Context->Attribute,
|
|
PropertySetHeader.IdTableOffset,
|
|
sizeof( PROPERTY_ID_TABLE ),
|
|
&IdTable );
|
|
|
|
//
|
|
// Write out the heap and set the stream size
|
|
//
|
|
|
|
LogFileFullFailCheck( Context->IrpContext );
|
|
NtOfsPutData( Context->IrpContext,
|
|
Context->Attribute,
|
|
PropertySetHeader.ValueHeapOffset,
|
|
sizeof( PROPERTY_HEAP_HEADER ),
|
|
&HeapHeader );
|
|
}
|
|
|