/*++

Copyright (c) Microsoft Corporation. All rights reserved.

Module Name:

    PpRegState.h

Abstract:

    This header exposes routines for reading and writing PnP registry state
    information.

Author:

    Adrian J. Oney  - April 21, 2002

Revision History:

--*/

#define DSIFLAG_DEVICE_TYPE             0x00000001
#define DSIFLAG_SECURITY_DESCRIPTOR     0x00000002
#define DSIFLAG_CHARACTERISTICS         0x00000004
#define DSIFLAG_EXCLUSIVE               0x00000008

typedef struct {

    ULONG                   Flags;
    DEVICE_TYPE             DeviceType;
    PSECURITY_DESCRIPTOR    SecurityDescriptor;
    ULONG                   Characteristics;
    ULONG                   Exclusivity;

} STACK_CREATION_SETTINGS, *PSTACK_CREATION_SETTINGS;

NTSTATUS
PpRegStateReadCreateClassCreationSettings(
    IN  LPCGUID                     DeviceClassGuid,
    IN  PDRIVER_OBJECT              DriverObject,
    OUT PSTACK_CREATION_SETTINGS    StackCreationSettings
    );

NTSTATUS
PpRegStateUpdateStackCreationSettings(
    IN  LPCGUID                     DeviceClassGuid,
    IN  PSTACK_CREATION_SETTINGS    StackCreationSettings
    );

VOID
PpRegStateFreeStackCreationSettings(
    IN  PSTACK_CREATION_SETTINGS    StackCreationSettings
    );

VOID
PpRegStateLoadSecurityDescriptor(
    IN      PSECURITY_DESCRIPTOR        SecurityDescriptor,
    IN OUT  PSTACK_CREATION_SETTINGS    StackCreationSettings
    );

VOID
PpRegStateInitEmptyCreationSettings(
    OUT PSTACK_CREATION_SETTINGS    StackCreationSettings
    );