// common (shared) routines

VOID SetErrorText( DWORD ResID );
VOID SetReturnText( LPSTR Text );
BOOL FFileExist(LPSTR);

BOOL
GenerateSortedIndexList (
    IN  DWORD cArgs,
    IN  LPSTR Args[],
    OUT LPSTR *TextOut
    );


// routines in nt_io.c

HANDLE OpenDisk(PSTR DriveName,BOOL WriteAccessDesired);
HANDLE OpenDiskNT(CHAR *NTStylePathName);
ULONG  OpenDiskStatus(PSTR NTDeviceName,PHANDLE Handle);
BOOL   CloseDisk(HANDLE Handle);
ULONG  GetSectorSize(HANDLE Handle);
ULONG  GetPartitionSize(CHAR *DriveName);
BOOL   ReadDiskSectors (HANDLE Handle,ULONG Sector,ULONG NumSectors,PVOID Buffer,ULONG SectorSize);
BOOL   WriteDiskSectors(HANDLE Handle,ULONG Sector,ULONG NumSectors,PVOID Buffer,ULONG SectorSize);
BOOL   ShutdownSystemWorker(IN BOOL Reboot);
//BOOL   MakePartitionWorker(DWORD Disk,DWORD Size);

// workers for DLL entry points

BOOL LayBootCodeWorker(IN LPSTR DOSDriveName,IN LPSTR FileSys,IN LPSTR BootCodeFile,IN LPSTR BootSectorSaveFile);
BOOL ConfigFileSubstWorker(IN LPSTR File,IN DWORD NumSubsts,IN LPSTR *Substs);
BOOL BinaryFileSubstWorker(IN LPSTR File,IN DWORD NumSubsts,IN LPSTR *Substs);
BOOL ConfigFileAppendWorker(IN LPSTR File,IN DWORD NumSubsts, IN LPSTR *Substs);
BOOL CheckConfigTypeWorker( IN LPSTR File );
BOOL VdmFixupWorker( LPSTR szAddOnConfig, LPSTR szAddOnBatch);




//=====================================================
// Registry.c declarations
//=====================================================

//
// 1. Registry routines of general use
//

BOOL
GetMaxSizeValueInKey(
    HKEY    hKey,
    LPDWORD cbData
    );

PVOID
GetValueEntry(
    HKEY  hKey,
    LPSTR szValueName
    );

BOOL
GenerateUniqueFileName(
    IN     LPSTR TempPath,
    IN     LPSTR Prefix,
    IN OUT LPSTR TempFile
    );


//
// 2. Install workers
//

BOOL
SetMyComputerNameWorker(
    LPSTR ComputerName
    );


BOOL
SetEnvVarWorker(
    LPSTR UserOrSystem,
    LPSTR Name,
    LPSTR Title,
    LPSTR RegType,
    LPSTR Data
    );

BOOL
ExpandSzWorker(
    LPSTR EnvironmentString,
    LPSTR ReturnBuffer,
    DWORD cbReturnBuffer
    );

VOID
DoDelnode(
    IN PCHAR Directory
    );

//=====================================================
// Security.c declarations
//=====================================================


#define ENABLE_PRIVILEGE  0
#define DISABLE_PRIVILEGE 1
#define RESTORE_PRIVILEGE 2


//
// 1. Security routines of general use
//

BOOL
AdjustPrivilege(
    IN LONG PrivilegeType,
    IN INT  Action,
    IN PTOKEN_PRIVILEGES PrevState,
    IN PULONG ReturnLength
    );

BOOL
RestorePrivilege(
    IN PTOKEN_PRIVILEGES PrevState
    );

//
// 2. Workers for install entry points
//

BOOL
CheckPrivilegeExistsWorker(
    IN LPSTR PrivilegeType
    );

BOOL
EnablePrivilegeWorker(
    LPSTR PrivilegeType,
    LPSTR Action
    );

//======================================================
// Printer.c declarations
//======================================================

BOOL
AddPrinterDriverWorker(
    LPSTR Model,
    LPSTR Environment,
    LPSTR Driver,
    LPSTR DataFile,
    LPSTR ConfigFile,
    LPSTR Server
    );

BOOL
AddPrinterWorker(
    LPSTR Name,
    LPSTR Port,
    LPSTR Model,
    LPSTR Description,
    LPSTR PrintProcessor,
    DWORD Attributes,
    LPSTR Server
    );

BOOL
AddPrinterMonitorWorker(
    IN LPSTR Model,
    IN LPSTR Environment,
    IN LPSTR Driver,
    IN LPSTR Server
    );

//======================================================
// Netcon.c declarations
//======================================================
BOOL
AddNetConnectionWorker(
    IN LPSTR szUNCName,
    IN LPSTR szPassword,
    IN LPSTR szLocalName
    );

BOOL
DeleteNetConnectionWorker(
    IN LPSTR szLocalName,
    IN LPSTR szForceClosure
    );

CHAR CheckNetConnection(
    LPSTR szUNCName
    );

VOID
DeleteAllConnectionsWorker(
    VOID
   );


//======================================================
// Nls.c declarations
//======================================================

BOOL
SetCurrentLocaleWorker(
    LPSTR Locale,
    LPSTR ModifyCPL
    );


//======================================================
// sc.c declarations (service controller)
//======================================================

BOOL
TestAdminWorker(
    );

BOOL
SetupCreateServiceWorker(
    LPSTR   lpServiceName,
    LPSTR   lpDisplayName,
    DWORD   dwServiceType,
    DWORD   dwStartType,
    DWORD   dwErrorControl,
    LPSTR   lpBinaryPathName,
    LPSTR   lpLoadOrderGroup,
    LPSTR   lpDependencies,
    LPSTR   lpServiceStartName,
    LPSTR   lpPassword
    );

BOOL
SetupChangeServiceStartWorker(
    LPSTR   lpServiceName,
    DWORD   dwStartType
    );

BOOL
SetupChangeServiceConfigWorker(
    LPSTR  lpServiceName,
    DWORD  dwServiceType,
    DWORD  dwStartType,
    DWORD  dwErrorControl,
    LPSTR  lpBinaryPathName,
    LPSTR  lpLoadOrderGroup,
    LPSTR  lpDependencies,
    LPSTR  lpServiceStartName,
    LPSTR  lpPassword,
    LPSTR  lpDisplayName
    );

LPSTR
ProcessDependencyList(
    LPSTR lpDependenciesList
    );

//======================================================
// Mips NVRAM var functions
//======================================================

BOOL GetEnvironmentString(IN LPSTR lpVar, OUT LPSTR lpValue,IN  USHORT MaxLengthValue);
BOOL SetEnvironmentString(IN LPSTR lpVar, IN LPSTR lpValue);

//
// Object directory manipulation functions
//

BOOL
GetSymbolicLinkSource(
    IN  PUNICODE_STRING pObjDir_U,
    IN  PUNICODE_STRING pTarget_U,
    OUT PUNICODE_STRING pSource_U
    );

BOOL
GetSymbolicLinkTarget(
    IN     PUNICODE_STRING pSourceString_U,
    IN OUT PUNICODE_STRING pDestString_U
    );

//
// DOS Name and Arc Name space manipulation
//

BOOL
DosPathToNtPathWorker(
    IN  LPSTR DosPath,
    OUT LPSTR NtPath
    );

BOOL
NtPathToDosPathWorker(
    IN  LPSTR NtPath,
    OUT LPSTR DosPath
    );

BOOL
DosPathToArcPathWorker(
    IN  LPSTR DosPath,
    OUT LPSTR ArcPath
    );

BOOL
ArcPathToDosPathWorker(
    IN  LPSTR ArcPath,
    OUT LPSTR DosPath
    );

BOOL
IsDriveExternalScsi(
    IN  LPSTR DosDrive,
    OUT BOOL  *IsExternalScsi
    );


// external data

extern HANDLE MyDllModuleHandle;
extern ULONG  SectorSize;

// data structs

typedef struct _tagTEMPFILE {
    struct _tagTEMPFILE *Next;      // *MUST* BE THE FIRST FIELD!!!
    LPSTR               Filename;
} TEMPFILE,*PTEMPFILE;

// the following are used for portable access to various
// in-memory copies of disk structures

#define LoadBYTE(x)   ((DWORD)(*(PBYTE)(x)))

#define LoadWORD(x)   ((DWORD)(    (USHORT)(* (PBYTE)(x)    )        \
                                | ((USHORT)(*((PBYTE)(x) + 1)) << 8) ))

#define LoadDWORD(x)  ((LoadWORD((PBYTE)(x)+2) << 16) | LoadWORD(x))