NTSTATUS PhLoadMappedArchive( _In_opt_ PWSTR FileName, _In_opt_ HANDLE FileHandle, _In_ BOOLEAN ReadOnly, _Out_ PPH_MAPPED_ARCHIVE MappedArchive ) { NTSTATUS status; status = PhMapViewOfEntireFile( FileName, FileHandle, ReadOnly, &MappedArchive->ViewBase, &MappedArchive->Size ); if (NT_SUCCESS(status)) { status = PhInitializeMappedArchive( MappedArchive, MappedArchive->ViewBase, MappedArchive->Size ); if (!NT_SUCCESS(status)) { PhUnloadMappedArchive(MappedArchive); } } return status; }
VOID PvLibProperties( VOID ) { NTSTATUS status; PROPSHEETHEADER propSheetHeader = { sizeof(propSheetHeader) }; PROPSHEETPAGE propSheetPage; HPROPSHEETPAGE pages[1]; status = PhLoadMappedArchive(PvFileName->Buffer, NULL, TRUE, &PvMappedArchive); if (!NT_SUCCESS(status)) { PhShowStatus(NULL, L"Unable to load the archive file", status, 0); return; } propSheetHeader.dwFlags = PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP | PSH_PROPTITLE; propSheetHeader.hwndParent = NULL; propSheetHeader.pszCaption = PvFileName->Buffer; propSheetHeader.nPages = 0; propSheetHeader.nStartPage = 0; propSheetHeader.phpage = pages; // Exports page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_LIBEXPORTS); propSheetPage.pfnDlgProc = PvpLibExportsDlgProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); PropertySheet(&propSheetHeader); PhUnloadMappedArchive(&PvMappedArchive); }