Something i've just noticed:
Code:
if (lpData->hShellLibrary)
{
lpData->ShellAlloc = GetProcAddress(lpData->hShellLibrary, "SHAllocShared");
lpData->ShellFree = GetProcAddress(lpData->hShellLibrary, "SHFreeShared");
lpData->ShellUnlock = GetProcAddress(lpData->hShellLibrary, "SHUnlockShared");
lpData->ShellFree = GetProcAddress(lpData->hShellLibrary, "SHLockShared");
}
should be
Code:
if (lpData->hShellLibrary)
{
lpData->ShellAlloc = GetProcAddress(lpData->hShellLibrary, "SHAllocShared");
lpData->ShellFree = GetProcAddress(lpData->hShellLibrary, "SHFreeShared");
lpData->ShellUnlock = GetProcAddress(lpData->hShellLibrary, "SHUnlockShared");
lpData->ShellLock = GetProcAddress(lpData->hShellLibrary, "SHLockShared");
}