/*++

Copyright (c) 1998 Microsoft Corporation

Module Name:
    frsapi.idl

Abstract:
    Define the application programmer's interface for NtFrs.

Author:
    Billy J. Fuller 1-Jan-1998

Environment:
    User mode winnt

Comments:
             Important version information
            -------------------------------
Whenever this interface is updated, the version number (a few lines
below) MUST be changed. This insures that a the client and server remain
synchronized, and that calls will succeed only if the client and server
are compatible. The vesrion number is in the form of x.y where x is the
major version number and y is the minor version number. If the changes
to the interface are upwardly compatible, (i.e., a client calling
through the old interface definition is allowed to connect to a server
exposing the new interface definition), you should increase the minor
version number (y) and maintain the same major version number. If the
changes to the interface render it incompatible with the older clients,
increase the major version (x) and reset the minor version number to 0.
Note that the defines for the handle names must be changed also.

--*/
[
    uuid (D049B186-814F-11D1-9A3C-00C04FC9B232), version(1.1),
    pointer_default (unique)
] interface NtFrsApi
{
    typedef unsigned long   ULONG;
    typedef wchar_t         WCHAR, *PWCHAR;

    //
    // VERSION 1.1
    //
    // Don't reorder.
    // Add new functions to end of idl and change version's minor number.
    //

    //
    // Seed the system volume (sysvol). Called during dcpromo.
    //
    ULONG
    NtFrsApi_Rpc_StartPromotionW(
        [in]                            handle_t Handle,
        [in, string, unique]  PWCHAR   ParentComputer,
        [in, string, unique]  PWCHAR   ParentAccount,
        [in, string, unique]  PWCHAR   ParentPassword,
        [in, string, unique]  PWCHAR   ReplicaSetName,
        [in, string, unique]  PWCHAR   ReplicaSetType,
        [in]                  ULONG    ReplicaSetPrimary,
        [in, string, unique]  PWCHAR   ReplicaSetStage,
        [in, string, unique]  PWCHAR   ReplicaSetRoot
        );

    //
    // Status of sysvol seeding. Called during dcpromo.
    //
    ULONG
    NtFrsApi_Rpc_PromotionStatusW(
        [in]                    handle_t Handle,
        [in, string, unique]    PWCHAR   ReplicaSetName,
        [out]                   ULONG    *ServiceState,
        [out]                   ULONG    *ServiceWStatus,
        [out, string]           PWCHAR   *ServiceDisplay
        );

    //
    // Stop replicating the system volume (sysvol). Called during dcdemote.
    //
    ULONG
    NtFrsApi_Rpc_StartDemotionW(
        [in]                    handle_t Handle,
        [in, string, unique]    PWCHAR   ReplicaSetName
        );

    //
    // Commit the demotion of all demoted sysvols. Called during dcdemote.
    //
    ULONG
    NtFrsApi_Rpc_CommitDemotionW(
        [in] handle_t Handle
        );

    //
    // Set the interval and initiate a polling cycle
    //
    ULONG
    NtFrsApi_Rpc_Set_DsPollingIntervalW(
        [in]    handle_t Handle,
        [in]    ULONG    UseShortInterval,
        [in]    ULONG    LongInterval,
        [in]    ULONG    ShortInterval
        );

    //
    // Get the current polling intervals
    //
    ULONG
    NtFrsApi_Rpc_Get_DsPollingIntervalW(
        [in]    handle_t Handle,
        [out]   ULONG    *Interval,
        [out]   ULONG    *LongInterval,
        [out]   ULONG    *ShortInterval
        );


    //
    // VERSION 1.2
    //

    //
    // Verify that promotion seems likely; otherwise fail early
    //
    ULONG
    NtFrsApi_Rpc_VerifyPromotionW(
        [in]                            handle_t Handle,
        [in, string, unique]  PWCHAR   ParentComputer,
        [in, string, unique]  PWCHAR   ParentAccount,
        [in, string, unique]  PWCHAR   ParentPassword,
        [in, string, unique]  PWCHAR   ReplicaSetName,
        [in, string, unique]  PWCHAR   ReplicaSetType,
        [in]                  ULONG    ReplicaSetPrimary,
        [in, string, unique]  PWCHAR   ReplicaSetStage,
        [in, string, unique]  PWCHAR   ReplicaSetRoot
        );

    //
    // VERSION 1.3
    //

    //
    // Get internal info (blob format)
    //
    ULONG
    NtFrsApi_Rpc_InfoW(
        [in]                                    handle_t        Handle,
        [in]                                    ULONG           BlobSize,
        [in, out, size_is(BlobSize), unique]    unsigned char   *Blob
        );
}