diff options
Diffstat (limited to 'private/nw/test/lock3.c')
-rw-r--r-- | private/nw/test/lock3.c | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/private/nw/test/lock3.c b/private/nw/test/lock3.c new file mode 100644 index 000000000..eff9d0d55 --- /dev/null +++ b/private/nw/test/lock3.c @@ -0,0 +1,159 @@ +/*++ + +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 ); + } + } +} + + + |