MCPcopy Create free account
hub / github.com/Schnocker/NoEye / UnloadFile_Thread

Function UnloadFile_Thread

NoEye_Service/CMap.cpp:758–799  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

756 return Status;
757 };
758 DWORD WINAPI UnloadFile_Thread(WDLL* wDll)
759 {
760 PIMAGE_EXPORT_DIRECTORY Exports = 0;
761 PIMAGE_TLS_CALLBACK* TlsCallBack;
762 DWORD Oridinal = 0, Status = 0;
763 if (wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress &&
764 wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size &&
765 (wDll->Flags & ManualMap_FLAGS::CALL_EXPORT))
766 {
767 Exports = reinterpret_cast<PIMAGE_EXPORT_DIRECTORY>(reinterpret_cast<DWORD_PTR>(wDll->Image) + wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
768 Oridinal = 0;
769 if (Oridinal > Exports->NumberOfFunctions)
770 return FALSE;
771 wDll->Entrypoint = reinterpret_cast<FARPROC>((reinterpret_cast<DWORD*>((Exports->AddressOfFunctions + reinterpret_cast<DWORD_PTR>(wDll->Image)))[Oridinal] + reinterpret_cast<DWORD_PTR>(wDll->Image)));
772 if (wDll->Entrypoint)
773 {
774 Status = reinterpret_cast<BOOL(WINAPI*)(DWORD_PTR, DWORD, LPVOID)>(wDll->Entrypoint)(reinterpret_cast<DWORD_PTR>(wDll->Image), DLL_PROCESS_DETACH, NULL);
775 }
776 }
777 if (wDll->Tls &&
778 wDll->NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS].Size)
779 {
780 TlsCallBack = reinterpret_cast<PIMAGE_TLS_CALLBACK*>(wDll->Tls->AddressOfCallBacks);
781 if (TlsCallBack)
782 {
783 while (*TlsCallBack)
784 {
785 Status = reinterpret_cast<BOOL(WINAPI*)(DWORD_PTR, DWORD, LPVOID)>(*TlsCallBack)(reinterpret_cast<DWORD_PTR>(wDll->Image), DLL_PROCESS_DETACH, NULL);
786 TlsCallBack++;
787 }
788 }
789 }
790
791 wDll->Entrypoint = reinterpret_cast<PVOID>((reinterpret_cast<DWORD_PTR>(wDll->Image) + wDll->NtHeader->OptionalHeader.AddressOfEntryPoint));
792 if (wDll->NtHeader->OptionalHeader.AddressOfEntryPoint && !(wDll->Flags & ManualMap_FLAGS::CALL_EXPORT))
793 {
794 if ((wDll->NtHeader->FileHeader.Characteristics & IMAGE_FILE_DLL) == IMAGE_FILE_DLL)
795 Status = reinterpret_cast<BOOL(WINAPI*)(DWORD_PTR, DWORD, LPVOID)>(wDll->Entrypoint)(reinterpret_cast<DWORD_PTR>(wDll->Image), DLL_PROCESS_DETACH, NULL);
796 }
797 return Status;
798
799 }
800}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected