MCPcopy Create free account
hub / github.com/BeneficialCode/WinArk / IrpCreateFile

Method IrpCreateFile

KernelLibrary/FileManager.cpp:210–401  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

208}
209
210NTSTATUS FileManager::IrpCreateFile(
211 _Out_ PFILE_OBJECT* pFileObject,
212 _Out_ PDEVICE_OBJECT* pDeviceObject,
213 _In_ ACCESS_MASK DesiredAccess,
214 _In_ PCWSTR DosName,
215 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
216 _In_opt_ PLARGE_INTEGER AllocationSize,
217 _In_ ULONG FileAttributes,
218 _In_ ULONG ShareAccess,
219 _In_ ULONG CreateDisposition,
220 _In_ ULONG CreateOptions,
221 _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
222 _In_ ULONG EaLength
223) {
224 PAUX_ACCESS_DATA AuxData = nullptr;
225 HANDLE hRoot = nullptr;
226 PFILE_OBJECT RootObject = nullptr, FileObject = nullptr;
227 PDEVICE_OBJECT DeviceObject = nullptr, RealDeviceObject = nullptr;
228 PIRP Irp;
229 PIO_STACK_LOCATION stack;
230 NTSTATUS status = STATUS_UNSUCCESSFUL;
231 ACCESS_STATE AccessState;
232 KEVENT notifyEvent;
233 IO_SECURITY_CONTEXT IoSecurityContext;
234 UNICODE_STRING rootName, fileName;
235 RtlInitUnicodeString(&fileName, &DosName[2]);
236
237 do
238 {
239 // �򿪸�Ŀ¼
240 IO_STATUS_BLOCK ioStatus;
241 status = GetRootName(DosName, &rootName);
242 if (!NT_SUCCESS(status)) {
243 break;
244 }
245 ObjectAttributes attr(&rootName, ObjectAttributesFlags::Caseinsensive | ObjectAttributesFlags::KernelHandle);
246 status = IoCreateFile(&hRoot, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &ioStatus, nullptr,
247 FILE_ATTRIBUTE_NORMAL,
248 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
249 FILE_OPEN,
250 FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,
251 nullptr, 0, CreateFileTypeNone, nullptr, IO_NO_PARAMETER_CHECKING);
252 *IoStatusBlock = ioStatus;
253 if (!NT_SUCCESS(status)) {
254 break;
255 }
256
257 // �õ���Ŀ¼�ļ�����
258 status = ObReferenceObjectByHandle(hRoot,
259 FILE_READ_ATTRIBUTES,
260 *IoFileObjectType,
261 KernelMode,
262 (PVOID*)&RootObject,
263 nullptr);
264 if (!NT_SUCCESS(status)) {
265 break;
266 }
267

Callers

nothing calls this directly

Calls 2

RtlInitUnicodeStringFunction · 0.85
ObjectAttributesClass · 0.85

Tested by

no test coverage detected