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) 1996 Microsoft Corporation
Module Name:
ocwizard.c
Abstract:
Routines to query wizard pages from OC DLLs and manage the results.
No wizard is actually displayed by this routine -- that is up to whoever links to the OC Manager common library.
Author:
Ted Miller (tedm) 17-Sep-1996
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
UINT OcGetWizardPages( IN PVOID OcManagerContext, OUT PSETUP_REQUEST_PAGES Pages[WizPagesTypeMax] )
/*++
Routine Description:
Request wizard pages from OC DLL's, according to ordering and omission rules specified in the master OC inf.
Pages are returned in the form of wizard page handles in SETUP_REQUEST_PAGES data structures.
Arguments:
OcManagerContext - supplies OC Manager context structure, returned by OcInitialize().
Pages - points to a block of memory that can hold WizPagesTypeMax pointers to SETUP_REQUEST_PAGES structures. On successful completion, that array is filled in with such pointers.
Return Value:
Win32 error code indicating outcome.
--*/
{ WizardPagesType PageType; UINT n; LONG Id; UINT e,ErrorCode; POC_MANAGER OcManager; PSETUP_REQUEST_PAGES p,pages; OPTIONAL_COMPONENT Component;
//
// The context actually points at the OC_MANAGER structure.
//
OcManager = OcManagerContext;
//
// The ordering arrays for each wizard page type are
// stored away for us in the OC_MANAGER data structure.
//
ErrorCode = NO_ERROR; for(PageType=0; PageType<WizPagesTypeMax; PageType++) { //
// Allocate an empty list of pages for this page type.
//
Pages[PageType] = pSetupMalloc(offsetof(SETUP_REQUEST_PAGES,Pages)); if(Pages[PageType]) {
Pages[PageType]->MaxPages = 0;
for(n=0; (n < OcManager->TopLevelOcCount) && ((Id = OcManager->WizardPagesOrder[PageType][n]) != -1); n++) {
//
// Call the component and ask for its pages of the current type.
// If this succeeds, merge the pages of this type from the
// component into the master list for this component.
//
pSetupStringTableGetExtraData( OcManager->ComponentStringTable, Id, &Component, sizeof(OPTIONAL_COMPONENT) );
if ((Component.InternalFlags & OCFLAG_NOWIZARDPAGES) == 0) {
e = OcInterfaceRequestPages(OcManager,Id,PageType,&pages); if(e == NO_ERROR) {
p = pSetupRealloc( Pages[PageType], offsetof(SETUP_REQUEST_PAGES,Pages) + ((Pages[PageType]->MaxPages + pages->MaxPages) * sizeof(HPROPSHEETPAGE)) );
if(p) { Pages[PageType] = p;
CopyMemory( &p->Pages[p->MaxPages], pages->Pages, pages->MaxPages * sizeof(HPROPSHEETPAGE) );
Pages[PageType]->MaxPages += pages->MaxPages;
pSetupFree(pages);
} else { e = ERROR_NOT_ENOUGH_MEMORY; } } } else { e = NO_ERROR; }
if (e == ERROR_CALL_COMPONENT) { continue; // could be a dead component, just go on
}
if((e != NO_ERROR) && (ErrorCode == NO_ERROR)) { ErrorCode = e; } } } else { if(ErrorCode == NO_ERROR) { ErrorCode = ERROR_NOT_ENOUGH_MEMORY; } } }
// set flag if there are no pages before the oc page
if (OcManager->SetupData.OperationFlags & SETUPOP_STANDALONE) { if (!Pages[WizPagesWelcome]->MaxPages && !Pages[WizPagesMode]->MaxPages) { OcManager->InternalFlags |= OCMFLAG_NOPREOCPAGES; } }
return(ErrorCode); }
|