summaryrefslogtreecommitdiffstats
path: root/private/nw/test/lock3.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/nw/test/lock3.c')
-rw-r--r--private/nw/test/lock3.c159
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 );
+ }
+ }
+}
+
+
+