Windows NT 4.0 source code leak
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

/*++
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 );
}
}
}