|
|
/*++
Copyright (c) 1998-1999 Microsoft Corporation
Module Name:
main.c
Abstract:
simple bvt-like test code for SR.SYS.
Author:
Paul McDaniel (paulmcd) 07-Mar-2000
Revision History:
--*/
#include "precomp.h"
#include "stdlib.h"
void __cdecl main(int argc, char **argv) { char sz[1024]; HANDLE TestFile; ULONG Length; BOOL b; ULONG Disposition = 0; ULONG ShareMode = 0; ULONG DesiredAccess = GENERIC_WRITE|GENERIC_READ;
if (argc < 3) { printf("usage:\n\tsrclient.exe filename [op] [share_mode] [disposition] \n"); printf("\t\t0=WriteFile\n\t\t1=MapViewOfFile\n\t\t2=hold_open\n\t\t3=GetFileAttributesEx\n\t\t4=NtLockFile\n"); return; }
printf("performing %s on %s\n", argv[2], argv[1]);
if (argv[2][0] == '0') Disposition = CREATE_ALWAYS; else if (argv[2][0] == '1') Disposition = OPEN_ALWAYS; else if (argv[2][0] == '2' || argv[2][0] == '4') { ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE; DesiredAccess = GENERIC_READ; Disposition = OPEN_EXISTING; } else if (argv[2][0] == '3') { WIN32_FILE_ATTRIBUTE_DATA AttribData;
GetFileAttributesEx(argv[1], GetFileExInfoStandard , &AttribData);
printf("attribs = 0x%X\n", AttribData.dwFileAttributes); return; } else { printf("unknown code\n"); return; }
if (argc >= 4) { ShareMode = atoi(argv[3]); }
if (argc >= 5) { Disposition = atoi(argv[4]); }
printf ("share=%d,disposition=%d\n", ShareMode, Disposition); TestFile = CreateFile( argv[1], DesiredAccess, ShareMode, NULL, Disposition, FILE_ATTRIBUTE_NORMAL, NULL ); if (TestFile == INVALID_HANDLE_VALUE) { printf("CreateFile failed 0x%X\n", GetLastError()); return; }
Length = wsprintf(sz, "This is a test file");
if (argv[2][0] == '1') { HANDLE FileMapping; PVOID pFileMap; FileMapping = CreateFileMapping( TestFile, NULL, PAGE_READWRITE, 0, 19, NULL );
if (FileMapping == NULL) { printf("CreateFileMapping failed 0x%X\n", GetLastError()); return; }
pFileMap = MapViewOfFile(FileMapping, FILE_MAP_WRITE, 0, 0, 19); if (pFileMap == NULL) { printf("MapViewOfFile failed 0x%X\n", GetLastError()); return; }
CopyMemory(pFileMap, sz, Length);
if (UnmapViewOfFile(pFileMap) == FALSE) { printf("UnmapViewOfFile failed 0x%X\n", GetLastError()); return; }
CloseHandle(FileMapping); } else if (argv[2][0] == '0') {
b = WriteFile( TestFile, sz, Length, &Length, NULL );
if (b == FALSE) { printf("WriteFile failed 0x%X\n", GetLastError()); return; } } else if (argv[2][0] == '2') { //
// wait forever
//
printf("holding the file open...[ctl-c to break]\n"); Sleep(INFINITE); } else if (argv[2][0] == '4') { LARGE_INTEGER ByteOffset; LARGE_INTEGER Length; NTSTATUS Status; IO_STATUS_BLOCK IoStatusBlock; //
// lock the first byte of the file
//
ByteOffset.QuadPart = 0; Length.QuadPart = -1;
Status = NtLockFile( TestFile, NULL, NULL, NULL, // ApcContext OPTIONAL,
&IoStatusBlock, &ByteOffset, &Length, 1, // Key
FALSE, // FailImmediately
TRUE ); // Exclusive
if (NT_SUCCESS(Status) == FALSE) { printf("NtLockFile failed 0x%X\n", Status); return; } //
// wait forever
//
printf("holding the file open locked...[ctl-c to break]\n"); Sleep(INFINITE); }
printf("success\n"); CloseHandle(TestFile);
return; }
|