/*++ Copyright (c) 1989-1997 Microsoft Corporation Module Name: proptest.c Abstract: This module contains tests for Ntfs Property support. --*/ extern "C" { #include #include #include #include } #include #include #include // for CP_WINUNICODE #include extern "C" { #include } #include #include #include #include #include #include // // Simple wrapper for NtCreateFile // NTSTATUS OpenObject ( WCHAR const *pwszFile, ULONG CreateOptions, ULONG DesiredAccess, ULONG ShareAccess, ULONG CreateDisposition, HANDLE *ph) { NTSTATUS Status; OBJECT_ATTRIBUTES oa; UNICODE_STRING str; IO_STATUS_BLOCK isb; RtlDosPathNameToNtPathName_U(pwszFile, &str, NULL, NULL); InitializeObjectAttributes( &oa, &str, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = NtCreateFile( ph, DesiredAccess | SYNCHRONIZE, &oa, &isb, NULL, // pallocationsize (none!) FILE_ATTRIBUTE_NORMAL, ShareAccess, CreateDisposition, CreateOptions, NULL, // EA buffer (none!) 0); RtlFreeHeap(RtlProcessHeap(), 0, str.Buffer); return(Status); } void SzToWsz ( OUT WCHAR *Unicode, IN char *Ansi ) { while (*Unicode++ = *Ansi++) ; } void OpenTest ( char *FileName ) { NTSTATUS Status; HANDLE Handle; WCHAR WFileName[MAX_PATH]; char InputBuffer[10]; char OutputBuffer[200]; IO_STATUS_BLOCK Iosb; // // OPENTEST file count // // // Create the new file // SzToWsz( WFileName, FileName ); Status = OpenObject( WFileName, FILE_SYNCHRONOUS_IO_NONALERT, FILE_READ_DATA | FILE_WRITE_DATA, FALSE, FILE_CREATE, &Handle ); if (!NT_SUCCESS( Status )) { printf( "Unable to open %s - %x\n", FileName, Status ); } // // Write a small amount of data // Status = NtWriteFile( Handle, NULL, NULL, NULL, &Iosb, InputBuffer, 10, NULL, NULL ); if (!NT_SUCCESS( Status )) { printf( "Unable to write %s - %x\n", FileName, Status ); } // // Close the file // Status = NtClose( Handle ); if (!NT_SUCCESS( Status )) { printf( "Unable to close %s - %x\n", FileName, Status ); } // // Overwrite the file // Status = OpenObject( WFileName, FILE_SYNCHRONOUS_IO_NONALERT, FILE_READ_DATA | FILE_WRITE_DATA, FALSE, FILE_OVERWRITE, &Handle ); if (!NT_SUCCESS( Status )) { printf( "Unable to overwrite %s - %x\n", FileName, Status ); } // // Write a small amount of data // Status = NtWriteFile( Handle, NULL, NULL, NULL, &Iosb, InputBuffer, 10, NULL, NULL ); if (!NT_SUCCESS( Status )) { printf( "Unable to write %s - %x\n", FileName, Status ); } // // Close the file // Status = NtClose( Handle ); if (!NT_SUCCESS( Status )) { printf( "Unable to close %s - %x\n", FileName, Status ); } // // Delete the file // { OBJECT_ATTRIBUTES oa; UNICODE_STRING str; RtlDosPathNameToNtPathName_U( WFileName, &str, NULL, NULL ); InitializeObjectAttributes( &oa, &str, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = NtDeleteFile( &oa ); RtlFreeHeap(RtlProcessHeap(), 0, str.Buffer); if (!NT_SUCCESS( Status )) { printf( "Unable to delete %s - %x\n", FileName, Status ); } } } int __cdecl main ( int argc, char **argv) { DbgPrint( "--------------------------------------------\n" ); while (--argc != 0) { OpenTest( *++argv ); } DbgPrint( "--------------------------------------------\n" ); return 0; }