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.
165 lines
4.0 KiB
165 lines
4.0 KiB
/*++
|
|
|
|
Copyright (c) 1993 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ReplDel.c
|
|
|
|
Abstract:
|
|
|
|
Test app - tests ReplDeleteFile().
|
|
|
|
Author:
|
|
|
|
JR (John Rogers, JohnRo@Microsoft) 22-Apr-1993
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
Portable to any flat, 32-bit environment. (Uses Win32 typedefs.)
|
|
Requires ANSI C extensions: slash-slash comments, long external names.
|
|
|
|
Revision History:
|
|
|
|
22-Apr-1993 JohnRo
|
|
Created for RAID 7313: repl needs change permission to work on NTFS,
|
|
or we need to delete files differently.
|
|
22-Apr-1993 JohnRo
|
|
Added -v (verbose) command-line argument.
|
|
|
|
--*/
|
|
|
|
|
|
// These must be included first:
|
|
|
|
#include <windows.h> // IN, GetLastError(), LPCTSTR, OPTIONAL, etc.
|
|
#include <lmcons.h> // NET_API_STATUS.
|
|
|
|
// These may be included in any order:
|
|
|
|
#include <assert.h> // assert().
|
|
#include <netdebug.h> // DBGSTATIC.
|
|
#include <netlib.h> // NetpMemoryFree(), etc
|
|
#include <repldefs.h> // ReplDeleteFile().
|
|
#include <stdio.h> // printf(), etc.
|
|
#include <stdlib.h> // EXIT_FAILURE, EXIT_SUCCESS, _CRTAPI1.
|
|
#include <tstring.h> // NetpAllocWStrFromStr(), TCHAR_EOS.
|
|
#include <winerror.h> // ERROR_, NO_ERROR equates.
|
|
|
|
|
|
DBGSTATIC VOID
|
|
Usage(
|
|
IN char * ProgName
|
|
)
|
|
{
|
|
(VOID) printf(
|
|
"This program deletes a file, using replicator routines.\n\n"
|
|
"Author: JR (John Rogers, JohnRo@Microsoft)\n\n"
|
|
"Usage: %s [opts] targetFile\n\n"
|
|
"Where opts are:\n"
|
|
// " -d delete a directory\n",
|
|
" -v verbose\n",
|
|
ProgName);
|
|
}
|
|
|
|
int _CRTAPI1
|
|
main(
|
|
IN int argc,
|
|
IN char *argv[]
|
|
)
|
|
{
|
|
NET_API_STATUS ApiStatus;
|
|
int ArgNumber;
|
|
BOOL DoingFiles = TRUE;
|
|
BOOL GotPermission = FALSE;
|
|
LPWSTR PathName = NULL;
|
|
|
|
//
|
|
// Process command-line arguments.
|
|
//
|
|
|
|
for (ArgNumber = 1; ArgNumber < argc; ArgNumber++) {
|
|
if ((*argv[ArgNumber] == '-') || (*argv[ArgNumber] == '/')) {
|
|
switch (tolower(*(argv[ArgNumber]+1))) // Process switches
|
|
{
|
|
|
|
case 'd' : // Delete directory.
|
|
DoingFiles = FALSE;
|
|
break;
|
|
|
|
case 'v' :
|
|
ReplGlobalTrace = REPL_DEBUG_ALL;
|
|
break;
|
|
|
|
default :
|
|
Usage( argv[0] );
|
|
ApiStatus = ERROR_INVALID_PARAMETER;
|
|
goto Cleanup;
|
|
}
|
|
} else { // Must be a file name.
|
|
if (PathName == NULL) {
|
|
PathName = NetpAllocWStrFromStr(argv[ArgNumber]);
|
|
assert( PathName != NULL );
|
|
} else {
|
|
Usage( argv[0] ); // Too many file names.
|
|
ApiStatus = ERROR_INVALID_PARAMETER;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (PathName == NULL) { // not enough file names
|
|
Usage( argv[0] );
|
|
ApiStatus = ERROR_INVALID_PARAMETER;
|
|
goto Cleanup;
|
|
}
|
|
|
|
assert( PathName != NULL );
|
|
assert( (*PathName) != TCHAR_EOS );
|
|
|
|
//
|
|
// Init and enable the backup/restore permissions in our process token.
|
|
//
|
|
|
|
ApiStatus = ReplInitBackupPermission();
|
|
(VOID) printf( "Back from ReplInitBackupPermission, status "
|
|
FORMAT_API_STATUS ".\n", ApiStatus );
|
|
|
|
ApiStatus = ReplEnableBackupPermission();
|
|
(VOID) printf( "Back from ReplEnableBackupPermission, status "
|
|
FORMAT_API_STATUS ".\n", ApiStatus );
|
|
|
|
GotPermission = TRUE;
|
|
|
|
//
|
|
// Delete the file or directory.
|
|
//
|
|
|
|
if (DoingFiles) {
|
|
ApiStatus = ReplDeleteFile( PathName );
|
|
#if 0
|
|
} else {
|
|
ApiStatus = ReplDeleteDirectoryItself( PathName );
|
|
#endif
|
|
}
|
|
|
|
(VOID) printf(
|
|
"Removing " FORMAT_LPWSTR " gives " FORMAT_API_STATUS ".\n",
|
|
PathName, ApiStatus );
|
|
|
|
|
|
Cleanup:
|
|
if (GotPermission) {
|
|
(VOID) ReplDisableBackupPermission();
|
|
}
|
|
if (PathName != NULL) {
|
|
NetpMemoryFree( PathName );
|
|
}
|
|
|
|
if (ApiStatus == NO_ERROR) {
|
|
return (EXIT_SUCCESS);
|
|
} else {
|
|
return (EXIT_FAILURE);
|
|
}
|
|
}
|