mirror of https://github.com/lianthony/NT4.0
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.
174 lines
3.6 KiB
174 lines
3.6 KiB
/*++
|
|
|
|
Copyright (c) 1993 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
cudbfs.cxx
|
|
|
|
Abstract:
|
|
|
|
This module contains the declaration of ConvertDBFS, which is
|
|
the main entry point for this DLL.
|
|
|
|
Author:
|
|
|
|
Matthew Bradburn (mattbr) 24-Nov-1993
|
|
|
|
Environment:
|
|
|
|
ULIB, User Mode
|
|
|
|
--*/
|
|
|
|
#define _NTAPI_ULIB_
|
|
|
|
#include "cudbfs.hxx"
|
|
#include "dbfsconv.hxx"
|
|
#include "rtmsg.h"
|
|
|
|
STATIC BOOLEAN
|
|
DefineClassDescriptors(
|
|
);
|
|
|
|
extern "C" BOOLEAN
|
|
InitializeCudbfs(
|
|
PVOID DllHandle,
|
|
ULONG Reason,
|
|
PCONTEXT Context
|
|
)
|
|
{
|
|
STATIC BOOLEAN fInit = FALSE;
|
|
|
|
if (fInit) {
|
|
return TRUE;
|
|
}
|
|
|
|
if (DefineClassDescriptors()) {
|
|
fInit = TRUE;
|
|
return TRUE;
|
|
}
|
|
DbgAbort("Cudbfs init failed.\n");
|
|
return FALSE;
|
|
}
|
|
|
|
DECLARE_CLASS(DBFS_CONV);
|
|
|
|
STATIC BOOLEAN
|
|
DefineClassDescriptors(
|
|
)
|
|
{
|
|
if (DEFINE_CLASS_DESCRIPTOR(DBFS_CONV) &&
|
|
TRUE) {
|
|
return TRUE;
|
|
}
|
|
DbgPrint("Could not init class descriptors.\n");
|
|
return FALSE;
|
|
}
|
|
|
|
BOOLEAN FAR APIENTRY
|
|
ConvertDBFS(
|
|
IN PCWSTRING NtDriveName,
|
|
IN PCWSTRING HostFileName,
|
|
IN OUT PMESSAGE Message,
|
|
IN BOOLEAN Verbose,
|
|
OUT PCONVERT_STATUS Status
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function converts an HPFS volume to the target file system
|
|
in-place.
|
|
|
|
This function opens and locks the volume, so it is not suitable
|
|
for use by autoconvert.
|
|
|
|
Arguments:
|
|
|
|
NtDriveName -- Supplies the name of the drive.
|
|
HostFileName -- The path to the cvf.
|
|
Message -- Supplies an outlet for messages.
|
|
Verbose -- Supplies a flag indicating (if TRUE) that
|
|
conversion should be carried out in verbose mode.
|
|
Status -- Receives the status of the conversion.
|
|
|
|
Return Value:
|
|
|
|
TRUE upon successful completion.
|
|
|
|
--*/
|
|
{
|
|
DBFS_CONV conv;
|
|
DSTRING HostFilePath;
|
|
DSTRING backslash;
|
|
|
|
if (!backslash.Initialize("\\")) {
|
|
return FALSE;
|
|
}
|
|
|
|
HostFilePath.Initialize(NtDriveName);
|
|
HostFilePath.Strcat(&backslash);
|
|
HostFilePath.Strcat(HostFileName);
|
|
|
|
if (!conv.Initialize(NtDriveName, &HostFilePath, Message)) {
|
|
Message->Set(MSG_CONV_NO_MEMORY);
|
|
Message->Display("");
|
|
return FALSE;
|
|
}
|
|
return conv.Convert(Message, Verbose, Status);
|
|
}
|
|
|
|
BOOLEAN FAR APIENTRY
|
|
CheckFreeSpaceDBFS(
|
|
IN PCWSTRING NtDriveName,
|
|
IN PCWSTRING HostFileName,
|
|
IN OUT PMESSAGE Message,
|
|
IN BOOLEAN Verbose,
|
|
IN BOOLEAN HostIsCompressed,
|
|
IN BOOLEAN WillConvertHost
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine examines the given dblspace cvf and the host
|
|
volume to determine whether there is enough space available
|
|
to uncompress the contents of the cvf. Also checks to see
|
|
if there are file name conflicts or other reasons why the
|
|
cvf should not be uncompressed.
|
|
|
|
Arguments:
|
|
|
|
NtDriveName -- Supplies the name of the drive.
|
|
HostFileName -- The path to the cvf.
|
|
Message -- Supplies an outlet for messages.
|
|
Verbose -- Supplies a flag indicating (if TRUE) that
|
|
verbose messages should be printed
|
|
|
|
Return Value:
|
|
|
|
TRUE - the cvf may be uncompressed
|
|
FALSE - the cvf may not be uncompressed
|
|
|
|
--*/
|
|
{
|
|
DBFS_CONV conv;
|
|
DSTRING HostFilePath;
|
|
DSTRING backslash;
|
|
|
|
if (!backslash.Initialize("\\")) {
|
|
return FALSE;
|
|
}
|
|
|
|
HostFilePath.Initialize(NtDriveName);
|
|
HostFilePath.Strcat(&backslash);
|
|
HostFilePath.Strcat(HostFileName);
|
|
|
|
if (!conv.Initialize(NtDriveName, &HostFilePath, Message)) {
|
|
Message->Set(MSG_CONV_NO_MEMORY);
|
|
Message->Display("");
|
|
return FALSE;
|
|
}
|
|
return conv.CheckFreeSpace(Message, HostIsCompressed, Verbose, WillConvertHost);
|
|
}
|