/// <summary> /// currently BUGGY - not use, use CreateFile instead /// </summary> /// <param name="file_name"></param> /// <param name="file_access"></param> /// <param name="file_share"></param> /// <param name="options"></param> /// <returns></returns> public static IntPtr CreateFileHandle (string file_name, Win32FileAccess file_access, FileShare file_share, CreateFileOptions options) { var ret = IntPtr.Zero; var obj_attr_ptr = IntPtr.Zero; var file_name_struct_ptr = IntPtr.Zero; var obj_attr = new OBJECT_ATTRIBUTES(); try { //выделяем память под OBJECT_ATTRIBUTES var obj_attr_len = Marshal.SizeOf(typeof(OBJECT_ATTRIBUTES)); obj_attr_ptr = Marshal.AllocHGlobal(obj_attr_len); //инициализируем OBJECT_ATTRIBUTES obj_attr = new OBJECT_ATTRIBUTES(IOhelper.GetKernelFileName(file_name), (uint)ntApiFS.OBJ_CASE_INSENSITIVE); Marshal.StructureToPtr(obj_attr, obj_attr_ptr, true); //инициализируем IO_STATUS_BLOCK var status_block = new IO_STATUS_BLOCK(); //открываем... var res = ntApiFS.NtOpenFile (ref ret, file_access, obj_attr_ptr, ref status_block, (ulong)file_share, (ulong)options); NTSTATUS_helper.ThrowOnError(res, status_block, NTSTATUS_severity.Warning); return(ret); } finally { obj_attr.Dispose(); } }
public static extern IntPtr CreateFile( string lpFileName, // File name Win32FileAccess dwDesiredAccess, // Access mode Win32FileShare dwShareMode, // Share mode IntPtr lpSecurityAttributes, // SD Win32FileMode dwCreationDisposition, // How to create Win32FileAttributes dwFlagsAndAttributes, // File attributes IntPtr hTemplateFile // Handle to template file );
public static extern IntPtr CreateFile(string lpFileName, Win32FileAccess dwDesiredAccess, Win32FileShare dwShareMode, IntPtr lpSecurityAttributes, Win32FileMode dwCreationDisposition, Win32FileAttributes dwFlagsAndAttributes, IntPtr hTemplateFile);