703 lines
22 KiB
C++
703 lines
22 KiB
C++
//****************************************************************************
|
|
//
|
|
// Module: ULS.DLL
|
|
// File: ldapstub.cpp
|
|
// Content: ULS/LDAP stubbed functions
|
|
//
|
|
// Copyright (c) Microsoft Corporation 1996-1997
|
|
//
|
|
//****************************************************************************
|
|
|
|
#include "ulsp.h"
|
|
|
|
HWND g_hwndCB = NULL;
|
|
ULONG uMsgID;
|
|
|
|
//
|
|
// Initialization
|
|
//
|
|
HRESULT UlsLdap_Initialize (
|
|
HWND hwndCallback)
|
|
{
|
|
uMsgID = 1;
|
|
g_hwndCB = hwndCallback;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT UlsLdap_Deinitialize (void)
|
|
{
|
|
uMsgID = 0;
|
|
g_hwndCB = NULL;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT UlsLdap_Cancel (
|
|
ULONG uReqID)
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//
|
|
// Local machine information
|
|
//
|
|
HRESULT UlsLdap_RegisterUser (
|
|
LPTSTR pszServer,
|
|
PLDAP_USERINFO pUserInfo,
|
|
PHANDLE phUser,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
*phUser = (HANDLE)(0x11111111);
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_REGISTER_USER, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_RegisterApp (
|
|
HANDLE hUser,
|
|
PLDAP_APPINFO pAppInfo,
|
|
PHANDLE phApp,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
if (hUser != (HANDLE)(0x11111111))
|
|
{
|
|
ASSERT(0);
|
|
return ULS_E_FAIL;
|
|
};
|
|
|
|
*phApp = (HANDLE)(0x22222222);
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_REGISTER_APP, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
HRESULT UlsLdap_RegisterProtocol (
|
|
HANDLE hApp,
|
|
PLDAP_PROTINFO pProtInfo,
|
|
PHANDLE phProtocol,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
if (hApp != (HANDLE)(0x22222222))
|
|
{
|
|
ASSERT(0);
|
|
return ULS_E_FAIL;
|
|
};
|
|
|
|
*phProtocol = (HANDLE)(0x44444444);
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_REGISTER_PROTOCOL, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_UnRegisterUser (
|
|
HANDLE hUser,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
if (hUser != (HANDLE)(0x11111111))
|
|
{
|
|
ASSERT(0);
|
|
return ULS_E_FAIL;
|
|
};
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_UNREGISTER_USER, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_UnRegisterApp (
|
|
HANDLE hApp,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
if (hApp != (HANDLE)(0x22222222))
|
|
{
|
|
ASSERT(0);
|
|
return ULS_E_FAIL;
|
|
};
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_UNREGISTER_APP, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_UnRegisterProtocol (
|
|
HANDLE hProt,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
if (hProt != (HANDLE)(0x44444444))
|
|
{
|
|
ASSERT(0);
|
|
return ULS_E_FAIL;
|
|
};
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_UNREGISTER_PROTOCOL, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_SetUserInfo (
|
|
HANDLE hUser,
|
|
PLDAP_USERINFO pInfo,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_SET_USER_INFO, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_SetAppAttrs (
|
|
HANDLE hApp,
|
|
ULONG cAttrs,
|
|
LPTSTR pszAttrs,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_SET_APP_ATTRS, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_SetProtocolAttrs (
|
|
HANDLE hProt,
|
|
ULONG cAttrs,
|
|
LPTSTR pszAttrs,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_SET_PROTOCOL_ATTRS, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_RemoveAppAttrs (
|
|
HANDLE hApp,
|
|
ULONG cAttrs,
|
|
LPTSTR pszAttrNames,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_REMOVE_APP_ATTRS, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_RemoveProtocolAttrs (
|
|
HANDLE hApp,
|
|
ULONG cAttrs,
|
|
LPTSTR pszAttrNames,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_REMOVE_PROTOCOL_ATTRS, uMsgID, NOERROR);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
//
|
|
// User Location Services request
|
|
//
|
|
static TCHAR c_szEnumNames_1[] = {TEXT("User_1") TEXT("\0")
|
|
TEXT("User_2") TEXT("\0")
|
|
TEXT("User_3") TEXT("\0")
|
|
TEXT("User_4") TEXT("\0\0")};
|
|
|
|
static TCHAR c_szEnumNames_2[] = {TEXT("User_5") TEXT("\0")
|
|
TEXT("User_6") TEXT("\0")
|
|
TEXT("User_7") TEXT("\0")
|
|
TEXT("User_8") TEXT("\0\0")};
|
|
|
|
HRESULT UlsLdap_EnumUsers (
|
|
LPTSTR pszServer,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
PLDAP_ENUM ple;
|
|
|
|
// First batch
|
|
//
|
|
ple = (PLDAP_ENUM)LocalAlloc(LMEM_FIXED, sizeof(*ple)+sizeof(c_szEnumNames_1));
|
|
ple->uSize = sizeof(*ple);
|
|
ple->hResult = NOERROR;
|
|
ple->cItems = 4;
|
|
ple->uOffsetItems = ple->uSize;
|
|
CopyMemory(((PBYTE)ple)+ple->uOffsetItems, c_szEnumNames_1,
|
|
sizeof(c_szEnumNames_1));
|
|
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_USERS, uMsgID, (LPARAM)ple);
|
|
|
|
// Second batch
|
|
//
|
|
ple = (PLDAP_ENUM)LocalAlloc(LMEM_FIXED, sizeof(*ple)+sizeof(c_szEnumNames_2));
|
|
ple->uSize = sizeof(*ple);
|
|
ple->hResult = NOERROR;
|
|
ple->cItems = 4;
|
|
ple->uOffsetItems = ple->uSize;
|
|
CopyMemory(((PBYTE)ple)+ple->uOffsetItems, c_szEnumNames_2,
|
|
sizeof(c_szEnumNames_2));
|
|
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_USERS, uMsgID, (LPARAM)ple);
|
|
|
|
// Terminate
|
|
//
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_USERS, uMsgID, (LPARAM)NULL);
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_ResolveUser (
|
|
LPTSTR pszServer,
|
|
LPTSTR pszUserName,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
PLDAP_USERINFO_RES plur;
|
|
PLDAP_USERINFO plu;
|
|
ULONG cLen;
|
|
|
|
plur = (PLDAP_USERINFO_RES)LocalAlloc(LMEM_FIXED, sizeof(*plur)+
|
|
(sizeof(TCHAR)*MAX_PATH));
|
|
plur->uSize = sizeof(*plur);
|
|
plur->hResult = NOERROR;
|
|
|
|
plu = &(plur->lui);
|
|
plu->uSize = sizeof(LDAP_USERINFO);
|
|
plu->uOffsetName = plu->uSize;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetName), TEXT("%s"), pszUserName) + 1;
|
|
|
|
plu->uOffsetFirstName = plu->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetFirstName), TEXT("%s_First"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetLastName = plu->uOffsetFirstName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetLastName), TEXT("%s_Last"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetEMailName = plu->uOffsetLastName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetEMailName), TEXT("%s"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCityName = plu->uOffsetEMailName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCityName), TEXT("%sville"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCountryName = plu->uOffsetCityName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCountryName), TEXT("%sland"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetComment = plu->uOffsetCountryName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetComment), TEXT("%s's comment"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetIPAddress = plu->uOffsetComment+cLen;
|
|
lstrcpy((LPTSTR)(((PBYTE)plu)+plu->uOffsetIPAddress), TEXT("125.1.100.2"));
|
|
plu->dwFlags = 1;
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_RESOLVE_USER, uMsgID, (LPARAM)plur);
|
|
uMsgID++;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT UlsLdap_EnumUserInfos (
|
|
LPTSTR pszServer,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
PLDAP_ENUM ple;
|
|
PLDAP_USERINFO plu;
|
|
LPTSTR pszUserName;
|
|
ULONG uOffsetLast;
|
|
ULONG cLen;
|
|
|
|
// First batch
|
|
//
|
|
ple = (PLDAP_ENUM)LocalAlloc(LMEM_FIXED, sizeof(*ple)+
|
|
3*sizeof(LDAP_USERINFO)+
|
|
3*sizeof(TCHAR)*MAX_PATH);
|
|
ple->uSize = sizeof(*ple);
|
|
ple->hResult = NOERROR;
|
|
ple->cItems = 3;
|
|
ple->uOffsetItems = ple->uSize;
|
|
|
|
// First batch--First guy
|
|
//
|
|
pszUserName = c_szEnumNames_1;
|
|
plu = (PLDAP_USERINFO)(((PBYTE)ple)+ple->uOffsetItems);
|
|
plu->uSize = sizeof(LDAP_USERINFO);
|
|
plu->uOffsetName = sizeof(*plu)*3;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetName), TEXT("%s"), pszUserName) + 1;
|
|
|
|
plu->uOffsetFirstName = plu->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetFirstName), TEXT("%s_First"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetLastName = plu->uOffsetFirstName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetLastName), TEXT("%s_Last"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetEMailName = plu->uOffsetLastName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetEMailName), TEXT("%s"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCityName = plu->uOffsetEMailName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCityName), TEXT("%sville"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCountryName = plu->uOffsetCityName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCountryName), TEXT("%sland"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetComment = plu->uOffsetCountryName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetComment), TEXT("%s's comment"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetIPAddress = plu->uOffsetComment+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetIPAddress), TEXT("125.1.100.2"))+1;
|
|
plu->dwFlags = 1;
|
|
uOffsetLast = plu->uOffsetIPAddress+cLen;
|
|
|
|
// First batch--Second guy
|
|
//
|
|
pszUserName += lstrlen(pszUserName)+1;
|
|
plu = (PLDAP_USERINFO)plu+1;
|
|
plu->uSize = sizeof(LDAP_USERINFO);
|
|
plu->uOffsetName = uOffsetLast-sizeof(*plu);
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetName), TEXT("%s"), pszUserName) + 1;
|
|
|
|
plu->uOffsetFirstName = plu->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetFirstName), TEXT("%s_First"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetLastName = plu->uOffsetFirstName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetLastName), TEXT("%s_Last"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetEMailName = plu->uOffsetLastName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetEMailName), TEXT("%s"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCityName = plu->uOffsetEMailName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCityName), TEXT("%sville"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCountryName = plu->uOffsetCityName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCountryName), TEXT("%sland"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetComment = plu->uOffsetCountryName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetComment), TEXT("%s's comment"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetIPAddress = plu->uOffsetComment+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetIPAddress), TEXT("125.2.100.2"))+1;
|
|
plu->dwFlags = 1;
|
|
uOffsetLast = plu->uOffsetIPAddress+cLen;
|
|
|
|
// First batch--Third guy
|
|
//
|
|
pszUserName += lstrlen(pszUserName)+1;
|
|
plu = (PLDAP_USERINFO)plu+1;
|
|
plu->uSize = sizeof(LDAP_USERINFO);
|
|
plu->uOffsetName = uOffsetLast-sizeof(*plu);
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetName), TEXT("%s"), pszUserName) + 1;
|
|
|
|
plu->uOffsetFirstName = plu->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetFirstName), TEXT("%s_First"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetLastName = plu->uOffsetFirstName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetLastName), TEXT("%s_Last"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetEMailName = plu->uOffsetLastName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetEMailName), TEXT("%s"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCityName = plu->uOffsetEMailName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCityName), TEXT("%sville"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCountryName = plu->uOffsetCityName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCountryName), TEXT("%sland"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetComment = plu->uOffsetCountryName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetComment), TEXT("%s's comment"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetIPAddress = plu->uOffsetComment+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetIPAddress), TEXT("125.3.100.2"))+1;
|
|
plu->dwFlags = 1;
|
|
uOffsetLast = plu->uOffsetIPAddress+cLen;
|
|
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_USERINFOS, uMsgID, (LPARAM)ple);
|
|
|
|
// Second batch
|
|
//
|
|
ple = (PLDAP_ENUM)LocalAlloc(LMEM_FIXED, sizeof(*ple)+
|
|
3*sizeof(LDAP_USERINFO)+
|
|
3*sizeof(TCHAR)*MAX_PATH);
|
|
ple->uSize = sizeof(*ple);
|
|
ple->hResult = NOERROR;
|
|
ple->cItems = 3;
|
|
ple->uOffsetItems = ple->uSize;
|
|
|
|
// Second batch--First guy
|
|
//
|
|
pszUserName = c_szEnumNames_2;
|
|
plu = (PLDAP_USERINFO)(((PBYTE)ple)+ple->uOffsetItems);
|
|
plu->uSize = sizeof(LDAP_USERINFO);
|
|
plu->uOffsetName = sizeof(*plu)*3;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetName), TEXT("%s"), pszUserName) + 1;
|
|
|
|
plu->uOffsetFirstName = plu->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetFirstName), TEXT("%s_First"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetLastName = plu->uOffsetFirstName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetLastName), TEXT("%s_Last"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetEMailName = plu->uOffsetLastName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetEMailName), TEXT("%s"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCityName = plu->uOffsetEMailName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCityName), TEXT("%sville"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCountryName = plu->uOffsetCityName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCountryName), TEXT("%sland"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetComment = plu->uOffsetCountryName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetComment), TEXT("%s's comment"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetIPAddress = plu->uOffsetComment+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetIPAddress), TEXT("125.1.100.2"))+1;
|
|
plu->dwFlags = 1;
|
|
uOffsetLast = plu->uOffsetIPAddress+cLen;
|
|
|
|
// Second batch--Second guy
|
|
//
|
|
pszUserName += lstrlen(pszUserName)+1;
|
|
plu = (PLDAP_USERINFO)plu+1;
|
|
plu->uSize = sizeof(LDAP_USERINFO);
|
|
plu->uOffsetName = uOffsetLast-sizeof(*plu);
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetName), TEXT("%s"), pszUserName) + 1;
|
|
|
|
plu->uOffsetFirstName = plu->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetFirstName), TEXT("%s_First"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetLastName = plu->uOffsetFirstName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetLastName), TEXT("%s_Last"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetEMailName = plu->uOffsetLastName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetEMailName), TEXT("%s"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCityName = plu->uOffsetEMailName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCityName), TEXT("%sville"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCountryName = plu->uOffsetCityName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCountryName), TEXT("%sland"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetComment = plu->uOffsetCountryName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetComment), TEXT("%s's comment"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetIPAddress = plu->uOffsetComment+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetIPAddress), TEXT("125.2.100.2"))+1;
|
|
plu->dwFlags = 1;
|
|
uOffsetLast = plu->uOffsetIPAddress+cLen;
|
|
|
|
// Second batch--Third guy
|
|
//
|
|
pszUserName += lstrlen(pszUserName)+1;
|
|
plu = (PLDAP_USERINFO)plu+1;
|
|
plu->uSize = sizeof(LDAP_USERINFO);
|
|
plu->uOffsetName = uOffsetLast-sizeof(*plu);
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetName), TEXT("%s"), pszUserName) + 1;
|
|
|
|
plu->uOffsetFirstName = plu->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetFirstName), TEXT("%s_First"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetLastName = plu->uOffsetFirstName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetLastName), TEXT("%s_Last"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetEMailName = plu->uOffsetLastName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetEMailName), TEXT("%s"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCityName = plu->uOffsetEMailName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCityName), TEXT("%sville"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetCountryName = plu->uOffsetCityName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetCountryName), TEXT("%sland"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetComment = plu->uOffsetCountryName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetComment), TEXT("%s's comment"),
|
|
pszUserName) + 1;
|
|
|
|
plu->uOffsetIPAddress = plu->uOffsetComment+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plu)+plu->uOffsetIPAddress), TEXT("125.3.100.2"))+1;
|
|
plu->dwFlags = 1;
|
|
uOffsetLast = plu->uOffsetIPAddress+cLen;
|
|
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_USERINFOS, uMsgID, (LPARAM)ple);
|
|
|
|
// Termination
|
|
//
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_USERINFOS, uMsgID, (LPARAM)NULL);
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
static TCHAR c_szEnumApps[] = {TEXT("App_1") TEXT("\0")
|
|
TEXT("App_2") TEXT("\0")
|
|
TEXT("App_3") TEXT("\0")
|
|
TEXT("App_4") TEXT("\0\0")};
|
|
HRESULT UlsLdap_EnumApps (
|
|
LPTSTR pszServer,
|
|
LPTSTR pszUserName,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
PLDAP_ENUM ple;
|
|
|
|
ple = (PLDAP_ENUM)LocalAlloc(LMEM_FIXED, sizeof(*ple)+sizeof(c_szEnumApps));
|
|
ple->uSize = sizeof(*ple);
|
|
ple->hResult = NOERROR;
|
|
ple->cItems = 4;
|
|
ple->uOffsetItems = ple->uSize;
|
|
CopyMemory(((PBYTE)ple)+ple->uOffsetItems, c_szEnumApps,
|
|
sizeof(c_szEnumApps));
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_APPS, uMsgID, (LPARAM)ple);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
static TCHAR c_szAttributes[] = {TEXT("Attr_1") TEXT("\0") TEXT("Value_1") TEXT("\0")
|
|
TEXT("Attr_2") TEXT("\0") TEXT("Value_2") TEXT("\0")
|
|
TEXT("Attr_3") TEXT("\0") TEXT("Value_3") TEXT("\0")};
|
|
|
|
HRESULT UlsLdap_ResolveApp (
|
|
LPTSTR pszServer,
|
|
LPTSTR pszUserName,
|
|
LPTSTR pszAppName,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
PLDAP_APPINFO_RES plar;
|
|
PLDAP_APPINFO pla;
|
|
ULONG cLen;
|
|
|
|
plar = (PLDAP_APPINFO_RES)LocalAlloc(LMEM_FIXED, sizeof(*plar)+
|
|
(sizeof(TCHAR)*MAX_PATH));
|
|
plar->uSize = sizeof(*plar);
|
|
plar->hResult = NOERROR;
|
|
|
|
pla = &(plar->lai);
|
|
pla->uSize = sizeof(LDAP_APPINFO);
|
|
pla->guid = IID_IEnumULSNames;
|
|
|
|
pla->uOffsetName = pla->uSize;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)pla)+pla->uOffsetName), TEXT("%s"), pszAppName) + 1;
|
|
|
|
pla->uOffsetMimeType = pla->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)pla)+pla->uOffsetMimeType), TEXT("application\\%s"),
|
|
pszAppName) + 1;
|
|
|
|
pla->cAttributes = 3;
|
|
pla->uOffsetAttributes = pla->uOffsetMimeType+cLen;
|
|
CopyMemory((LPBYTE)(((PBYTE)pla)+pla->uOffsetAttributes),
|
|
c_szAttributes, sizeof(c_szAttributes));
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_RESOLVE_APP, uMsgID, (LPARAM)plar);
|
|
uMsgID++;
|
|
return S_OK;
|
|
}
|
|
|
|
static TCHAR c_szEnumProts[] = {TEXT("Prot_1") TEXT("\0")
|
|
TEXT("Prot_2") TEXT("\0")
|
|
TEXT("Prot_3") TEXT("\0")
|
|
TEXT("Prot_4") TEXT("\0\0")};
|
|
HRESULT UlsLdap_EnumProtocols (
|
|
LPTSTR pszServer,
|
|
LPTSTR pszUserName,
|
|
LPTSTR pszAppName,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
PLDAP_ENUM ple;
|
|
|
|
ple = (PLDAP_ENUM)LocalAlloc(LMEM_FIXED, sizeof(*ple)+sizeof(c_szEnumProts));
|
|
ple->uSize = sizeof(*ple);
|
|
ple->hResult = NOERROR;
|
|
ple->cItems = 4;
|
|
ple->uOffsetItems = ple->uSize;
|
|
CopyMemory(((PBYTE)ple)+ple->uOffsetItems, c_szEnumProts,
|
|
sizeof(c_szEnumProts));
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_ENUM_PROTOCOLS, uMsgID, (LPARAM)ple);
|
|
uMsgID++;
|
|
return NOERROR;
|
|
}
|
|
|
|
HRESULT UlsLdap_ResolveProtocol (
|
|
LPTSTR pszServer,
|
|
LPTSTR pszUserName,
|
|
LPTSTR pszAppName,
|
|
LPTSTR pszProtName,
|
|
PLDAP_ASYNCINFO pAsyncInfo )
|
|
{
|
|
PLDAP_PROTINFO_RES plpr;
|
|
PLDAP_PROTINFO plp;
|
|
ULONG cLen;
|
|
|
|
plpr = (PLDAP_PROTINFO_RES)LocalAlloc(LMEM_FIXED, sizeof(*plpr)+
|
|
(sizeof(TCHAR)*MAX_PATH));
|
|
plpr->uSize = sizeof(*plpr);
|
|
plpr->hResult = NOERROR;
|
|
|
|
plp = &(plpr->lpi);
|
|
plp->uSize = sizeof(LDAP_PROTINFO);
|
|
plp->uPortNumber = 80;
|
|
|
|
plp->uOffsetName = plp->uSize;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plp)+plp->uOffsetName), TEXT("%s"), pszProtName) + 1;
|
|
|
|
plp->uOffsetMimeType = plp->uOffsetName+cLen;
|
|
cLen = wsprintf((LPTSTR)(((PBYTE)plp)+plp->uOffsetMimeType), TEXT("protocol\\%s"),
|
|
pszProtName) + 1;
|
|
|
|
plp->cAttributes = 3;
|
|
plp->uOffsetAttributes = plp->uOffsetMimeType+cLen;
|
|
CopyMemory((LPBYTE)(((PBYTE)plp)+plp->uOffsetAttributes),
|
|
c_szAttributes, sizeof(c_szAttributes));
|
|
|
|
pAsyncInfo->uMsgID = uMsgID;
|
|
PostMessage(g_hwndCB, WM_ULS_RESOLVE_PROTOCOL, uMsgID, (LPARAM)plpr);
|
|
uMsgID++;
|
|
return S_OK;
|
|
}
|