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.
159 lines
3.5 KiB
159 lines
3.5 KiB
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
tfile.c
|
|
|
|
Abstract:
|
|
|
|
Test program for Win32 Base File API calls
|
|
|
|
Author:
|
|
|
|
Mark Lucovsky (markl) 26-Sep-1990
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include <windows.h>
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
VOID
|
|
TryLock(
|
|
int Type,
|
|
HANDLE Handle,
|
|
DWORD Offset,
|
|
DWORD StartOffset,
|
|
DWORD Range,
|
|
BOOL ExpectedResult
|
|
);
|
|
|
|
#define Lock 1
|
|
#define Unlock 2
|
|
|
|
DWORD
|
|
_cdecl
|
|
main(
|
|
int argc,
|
|
char *argv[],
|
|
char *envp[]
|
|
)
|
|
{
|
|
|
|
HANDLE iFile;
|
|
BOOL success;
|
|
STARTUPINFO startupInfo;
|
|
PROCESS_INFORMATION processInfo;
|
|
SECURITY_ATTRIBUTES security;
|
|
char commandLine[80];
|
|
int offset;
|
|
|
|
printf( "Number of arguments = %d\n", argc );
|
|
|
|
if ( argc == 1 ) {
|
|
|
|
security.nLength = sizeof( security );
|
|
security.lpSecurityDescriptor = NULL;
|
|
security.bInheritHandle = TRUE;
|
|
|
|
iFile = CreateFile(
|
|
"testfile.txt",
|
|
GENERIC_READ,
|
|
FILE_SHARE_READ,
|
|
&security,
|
|
OPEN_EXISTING,
|
|
0,
|
|
NULL
|
|
);
|
|
|
|
printf("Created file, handle = %d\n", iFile );
|
|
|
|
memset( &startupInfo, 0, sizeof( startupInfo ) );
|
|
sprintf( commandLine, "%s %d\n", argv[0], iFile );
|
|
|
|
success = CreateProcess(
|
|
"D:\\444\\nt\\system32\\lock3.exe",
|
|
commandLine,
|
|
NULL, // Process security
|
|
NULL, // Thread security
|
|
TRUE, // Inherit Handles
|
|
0, // Create flags
|
|
NULL, // Environment
|
|
NULL, // Current Directory
|
|
&startupInfo,
|
|
&processInfo );
|
|
|
|
if ( !success ) {
|
|
printf("Create process failed, err = %d\n", GetLastError() );
|
|
}
|
|
offset = 0;
|
|
} else {
|
|
|
|
iFile = (HANDLE)atoi( argv[1] );
|
|
printf("Inherited file handle = %d\n", iFile );
|
|
offset = 100;
|
|
}
|
|
|
|
assert(iFile != INVALID_HANDLE_VALUE);
|
|
|
|
TryLock( Lock, iFile, offset, 0, 10, TRUE );
|
|
TryLock( Lock, iFile, offset, 10, 10, TRUE );
|
|
TryLock( Lock, iFile, offset, 1, 1, FALSE );
|
|
TryLock( Lock, iFile, offset, 0, 11, FALSE );
|
|
TryLock( Lock, iFile, offset, 0, 20, FALSE );
|
|
TryLock( Unlock, iFile, offset, 1, 1, FALSE );
|
|
TryLock( Unlock, iFile, offset, 0, 12, FALSE );
|
|
TryLock( Unlock, iFile, offset, 0, 20, FALSE );
|
|
TryLock( Unlock, iFile, offset, 0, 10, TRUE );
|
|
TryLock( Unlock, iFile, offset, 10, 10, TRUE );
|
|
TryLock( Lock, iFile, offset, 0, 10, TRUE );
|
|
TryLock( Lock, iFile, offset, 10, 10, TRUE );
|
|
|
|
Sleep(5 * argc * 1000);
|
|
|
|
CloseHandle(iFile);
|
|
printf("Done\n");
|
|
return 1;
|
|
|
|
}
|
|
|
|
VOID
|
|
TryLock(
|
|
int Type,
|
|
HANDLE Handle,
|
|
DWORD Offset,
|
|
DWORD StartOffset,
|
|
DWORD Range,
|
|
BOOL ExpectedResult
|
|
)
|
|
{
|
|
BOOL result;
|
|
DWORD err;
|
|
|
|
if ( Type == Lock ) {
|
|
result = LockFile( Handle, StartOffset + Offset, 0, Range, 0 );
|
|
} else {
|
|
result = UnlockFile( Handle, StartOffset + Offset, 0, Range, 0 );
|
|
}
|
|
|
|
if ( result == ExpectedResult ) {
|
|
return;
|
|
} else {
|
|
err = GetLastError();
|
|
printf("Expected %d got %d for %slock at %d L%d\n",
|
|
ExpectedResult, result,
|
|
Type == Lock ? "" : "un",
|
|
StartOffset + Offset, Range );
|
|
if ( !result ) {
|
|
printf("Unexpected error = %08lx\n", err );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|