mirror of
https://github.com/reactos/reactos.git
synced 2025-05-31 23:18:39 +00:00
[FSUTIL]
Add a helper for opening a volume. Make it check for local devices if needed svn path=/trunk/; revision=75773
This commit is contained in:
parent
a8a2ee2151
commit
0134cec6f4
3 changed files with 40 additions and 16 deletions
|
@ -46,6 +46,39 @@ int FindHandler(int argc,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HANDLE OpenVolume(const TCHAR * Volume,
|
||||||
|
BOOLEAN AllowRemote)
|
||||||
|
{
|
||||||
|
UINT Type;
|
||||||
|
HANDLE hVolume;
|
||||||
|
TCHAR VolumeID[PATH_MAX];
|
||||||
|
|
||||||
|
/* Create full name */
|
||||||
|
_stprintf(VolumeID, _T("\\\\.\\%s"), Volume);
|
||||||
|
|
||||||
|
/* Get volume type */
|
||||||
|
if (!AllowRemote && Volume[1] == L':')
|
||||||
|
{
|
||||||
|
Type = GetDriveType(Volume);
|
||||||
|
if (Type == DRIVE_REMOTE)
|
||||||
|
{
|
||||||
|
_ftprintf(stderr, _T("FSUTIL needs a local device\n"));
|
||||||
|
return INVALID_HANDLE_VALUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open the volume */
|
||||||
|
hVolume = CreateFile(VolumeID, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
|
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if (hVolume == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
_ftprintf(stderr, _T("Error: %d\n"), GetLastError());
|
||||||
|
return INVALID_HANDLE_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hVolume;
|
||||||
|
}
|
||||||
|
|
||||||
void PrintDefaultUsage(const TCHAR * Command,
|
void PrintDefaultUsage(const TCHAR * Command,
|
||||||
const TCHAR * SubCommand,
|
const TCHAR * SubCommand,
|
||||||
HandlerItem * HandlersList,
|
HandlerItem * HandlersList,
|
||||||
|
|
|
@ -23,7 +23,6 @@ static int
|
||||||
QueryMain(int argc, const TCHAR *argv[])
|
QueryMain(int argc, const TCHAR *argv[])
|
||||||
{
|
{
|
||||||
HANDLE Volume;
|
HANDLE Volume;
|
||||||
TCHAR VolumeID[PATH_MAX];
|
|
||||||
ULONG VolumeStatus, BytesRead;
|
ULONG VolumeStatus, BytesRead;
|
||||||
|
|
||||||
/* We need a volume (letter or GUID) */
|
/* We need a volume (letter or GUID) */
|
||||||
|
@ -34,15 +33,10 @@ QueryMain(int argc, const TCHAR *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create full name */
|
/* Get a handle for the volume */
|
||||||
_stprintf(VolumeID, _T("\\\\.\\%s"), argv[1]);
|
Volume = OpenVolume(argv[1], FALSE);
|
||||||
|
|
||||||
/* Open the volume */
|
|
||||||
Volume = CreateFile(VolumeID, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
|
||||||
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
if (Volume == INVALID_HANDLE_VALUE)
|
if (Volume == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
_ftprintf(stderr, _T("Error: %d\n"), GetLastError());
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +62,6 @@ SetMain(int argc, const TCHAR *argv[])
|
||||||
{
|
{
|
||||||
HANDLE Volume;
|
HANDLE Volume;
|
||||||
DWORD BytesRead;
|
DWORD BytesRead;
|
||||||
TCHAR VolumeID[PATH_MAX];
|
|
||||||
|
|
||||||
/* We need a volume (letter or GUID) */
|
/* We need a volume (letter or GUID) */
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
|
@ -78,15 +71,10 @@ SetMain(int argc, const TCHAR *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create full name */
|
/* Get a handle for the volume */
|
||||||
_stprintf(VolumeID, _T("\\\\.\\%s"), argv[1]);
|
Volume = OpenVolume(argv[1], FALSE);
|
||||||
|
|
||||||
/* Open the volume */
|
|
||||||
Volume = CreateFile(VolumeID, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
|
||||||
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
if (Volume == INVALID_HANDLE_VALUE)
|
if (Volume == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
_ftprintf(stderr, _T("Error: %d\n"), GetLastError());
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,9 @@ int FindHandler(int argc,
|
||||||
int HandlerListCount,
|
int HandlerListCount,
|
||||||
void (*UsageHelper)(const TCHAR *));
|
void (*UsageHelper)(const TCHAR *));
|
||||||
|
|
||||||
|
HANDLE OpenVolume(const TCHAR * Volume,
|
||||||
|
BOOLEAN AllowRemote);
|
||||||
|
|
||||||
void PrintDefaultUsage(const TCHAR * Command,
|
void PrintDefaultUsage(const TCHAR * Command,
|
||||||
const TCHAR * SubCommand,
|
const TCHAR * SubCommand,
|
||||||
HandlerItem * HandlersList,
|
HandlerItem * HandlersList,
|
||||||
|
|
Loading…
Reference in a new issue