home *** CD-ROM | disk | FTP | other *** search
- // wkguid.cpp : Defines the entry point for the console application.
- //
-
- #include <wchar.h>
- #include <objbase.h>
-
- //For ADSI
- #include <activeds.h>
-
- //Make sure you define UNICODE
- //Need to define version 5 for Windows 2000
- #define _WIN32_WINNT 0x0500
- #include <ntdsapi.h>
-
- HRESULT GetWKDomainObject(LPOLESTR szBindableWKGUID, //IN. Bindable string GUID of well-known object.
- IADs **ppObject //OUT. Return a pointer to the specified well-known object.
- );
-
-
- void wmain( int argc, wchar_t *argv[ ])
- {
- wprintf(L"This program finds the User's container in the current Window 2000 domain\n");
- wprintf(L"It uses the WKGUID binding string format.\n");
- //Intialize COM
- CoInitialize(NULL);
- HRESULT hr = S_OK;
- //Get rootDSE and the domain container's DN.
- IADs *pObject = NULL;
- hr = GetWKDomainObject(GUID_USERS_CONTAINER_W, //IN. Bindable string GUID of Users container.
- &pObject //OUT. Return a pointer to the specified well-known object.
- );
- if (FAILED(hr))
- {
- wprintf(L"Not Found. Could not bind to the User container.\n");
- if (pObject)
- pObject->Release();
- return;
- }
-
- BSTR bstr;
- pObject->get_ADsPath(&bstr);
- wprintf (L"\nADsPath of Users Container (using WKGUID binding format):\n%s\n", bstr);
- FreeADsStr(bstr);
-
- hr = pObject->get_Name(&bstr);
- if (SUCCEEDED(hr))
- {
- wprintf (L"\nName of Users Container (using WKGUID binding format):\n%s\n", bstr);
- FreeADsStr(bstr);
- }
-
-
- VARIANT var;
- pObject->Get(L"distinguishedName",&var);
- wprintf (L"\nName of Users Container: %s\n", var.bstrVal);
- VariantClear(&var);
-
- if (pObject)
- pObject->Release();
-
-
- //Uninitalize COM
- CoUninitialize();
- return;
-
- }
-
- // This function gets the specified well-known object for the current user's domain.
- /* Note that the following well-known GUIDs are defined for domainDNS in ntdsapi.h:
- #define GUID_USERS_CONTAINER_W L"a9d1ca15768811d1aded00c04fd8d5cd"
- #define GUID_COMPUTRS_CONTAINER_W L"aa312825768811d1aded00c04fd8d5cd"
- #define GUID_SYSTEMS_CONTAINER_W L"ab1d30f3768811d1aded00c04fd8d5cd"
- #define GUID_DOMAIN_CONTROLLERS_CONTAINER_W L"a361b2ffffd211d1aa4b00c04fd7d83a"
- #define GUID_INFRASTRUCTURE_CONTAINER_W L"2fbac1870ade11d297c400c04fd8d5cd"
- #define GUID_DELETED_OBJECTS_CONTAINER_W L"18e2ea80684f11d2b9aa00c04f79f805"
- #define GUID_LOSTANDFOUND_CONTAINER_W L"ab8153b7768811d1aded00c04fd8d5cd"
- */
-
- HRESULT GetWKDomainObject(LPOLESTR szBindableWKGUID, //IN. Bindable string GUID of well-known object.
- IADs **ppObject //OUT. Return a pointer to the specified well-known object.
- )
- {
- HRESULT hr = E_FAIL;
- //Get rootDSE and the domain container's DN.
- IADs *pObject = NULL;
- LPOLESTR szPath = new OLECHAR[MAX_PATH];
- VARIANT var;
- hr = ADsOpenObject(L"LDAP://rootDSE",
- NULL,
- NULL,
- ADS_SECURE_AUTHENTICATION, //Use Secure Authentication
- IID_IADs,
- (void**)&pObject);
-
- //Get current domain DN.
- if (SUCCEEDED(hr))
- {
- hr = pObject->Get(L"defaultNamingContext",&var);
- if (SUCCEEDED(hr))
- {
- //Build the WKGUID binding string.
- wcscpy(szPath,L"LDAP://");
- wcscat(szPath,L"<WKGUID=");
- wcscat(szPath,szBindableWKGUID);
- wcscat(szPath,L",");
- wcscat(szPath,var.bstrVal);
- wcscat(szPath,L">");
- //Print the binding string.
- //wprintf(L"WKGUID binding string: %s\n",szPath);
- VariantClear(&var);
- //Bind to the well-known object.
- hr = ADsOpenObject(szPath,
- NULL,
- NULL,
- ADS_SECURE_AUTHENTICATION, //Use Secure Authentication
- IID_IADs,
- (void**)ppObject);
- if (FAILED(hr))
- {
- if (*ppObject)
- {
- (*ppObject)->Release();
- (*ppObject) = NULL;
- }
- }
- }
- }
- if (pObject)
- pObject->Release();
-
- return hr;
- }
-
-
-
-
-