/*++

Copyright (c) 1997 Microsoft Corporation

Module Name:
    frsrpc.idl

Abstract:
    Define the frsrpc interface.

Author:
    Billy J. Fuller 20-Mar-1997 (From Jim McNelis)

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 (F5CC59B4-4264-101A-8C59-08002B2F8426), version(1.1),
    pointer_default (unique)
] interface frsrpc
{
    //
    // VERSION 1.1
    //
    // Don't reorder.
    // Add new functions to end of file. Up version's minor number.
    //
    typedef unsigned long   ULONG;
    typedef unsigned char   UCHAR;
    typedef wchar_t         WCHAR, *PWCHAR;
    #include    <frsinrpc.h>

    //
    // Send a Comm Packet (actually, a blob)
    //
    ULONG
    FrsRpcSendCommPkt(
            [in]    handle_t        Handle,
            [in]    PCOMM_PACKET    CommPkt
        );

    //
    // Verify the account on the parent computer used for seeding sysvol
    //
    ULONG
    FrsRpcVerifyPromotionParent(
        [in]                    handle_t Handle,
        [in, string, unique]    PWCHAR   ParentAccount,
        [in, string, unique]    PWCHAR   ParentPassword,
        [in, string, unique]    PWCHAR   ReplicaSetName,
        [in, string, unique]    PWCHAR   ReplicaSetType,
        [in]                    ULONG    PartnerAuthLevel,
        [in]                    ULONG    GuidSize
        );

    //
    // Verify the account on the parent computer used for seeding sysvol
    //
    ULONG
    FrsRpcStartPromotionParent(
        [in]                    handle_t Handle,
        [in, string, unique]    PWCHAR   ParentAccount,
        [in, string, unique]    PWCHAR   ParentPassword,
        [in, string, unique]    PWCHAR   ReplicaSetName,
        [in, string, unique]    PWCHAR   ReplicaSetType,
        [in, string, unique]    PWCHAR   CxtionName,
        [in, string, unique]    PWCHAR   PartnerName,
        [in, string, unique]    PWCHAR   PartnerPrincName,
        [in]                    ULONG    PartnerAuthLevel,
        [in]                    ULONG    GuidSize,
        [in,  size_is(GuidSize), unique]        UCHAR   *CxtionGuid,
        [in,  size_is(GuidSize), unique]        UCHAR   *PartnerGuid,
        [in, out, size_is(GuidSize), unique]    UCHAR   *ParentGuid
        );

    //
    // A NOP function for pinging a server.
    //
    ULONG FrsNOP();

    //
    // NOT IMPLEMENTED - Enumerate the replica sets
    //
    ULONG FrsEnumerateReplicaPathnames();

    //
    // NOT IMPLEMENTED - Just a placeholder, it won't really be part of
    // the RPC interface but rather a function in the client-side dll.
    //
    ULONG FrsFreeReplicaPathnames();

    //
    // NOT IMPLEMENTED - Prepare for backup
    //
    ULONG FrsPrepareForBackup();

    //
    // NOT IMPLEMENTED - Prepare for backup
    //
    ULONG FrsBackupComplete();

    //
    // NOT IMPLEMENTED - backup is complete; reset state
    //
    ULONG FrsPrepareForRestore();

    //
    // NOT IMPLEMENTED - restore is complete; reset state
    //
    ULONG FrsRestoreComplete();

    //
    // VERSION 1.2
    //

    //
    // Verify the account on the parent computer used for seeding sysvol
    //
    ULONG
    FrsRpcVerifyPromotionParentEx(
        [in]                    handle_t Handle,
        [in, string, unique]    PWCHAR   ParentAccount,
        [in, string, unique]    PWCHAR   ParentPassword,
        [in, string, unique]    PWCHAR   ReplicaSetName,
        [in, string, unique]    PWCHAR   ReplicaSetType,
        [in, string, unique]    PWCHAR   CxtionName,
        [in, string, unique]    PWCHAR   PartnerName,
        [in, string, unique]    PWCHAR   PartnerPrincName,
        [in, string, unique]    PWCHAR   ParentPrincName,
        [in]                    ULONG    PartnerAuthLevel,
        [in]                    ULONG    GuidSize
        );
}
