DHCP (off/server/client) rausfinden - bc++ builder 5
-
Bis jetzt habe ich das hier fertig doch irgedwie klappt es nicht. Vielleicht sieht ihr ja den Fehler. Poste mal den Code: Ist zwar viel aber egal
// Gegen WbemUuid.Lib linken! #include <windows.h> #include <tchar.h> #include <wbemdisp.h> #include <cassert> HRESULT GetObjectProperty(ISWbemObject* pObject, LPCWSTR pwszPropertyName, VARIANT* pValue) { ISWbemPropertySet* pPropSet = NULL; ISWbemProperty* pProp = NULL; HRESULT hr; if(SUCCEEDED((hr = pObject->get_Properties_(&pPropSet)))) { BSTR bstrName = SysAllocString(pwszPropertyName); if(SUCCEEDED((hr = pPropSet->Item(bstrName, 0, &pProp)))) { VariantInit(pValue); hr = pProp->get_Value(pValue); pProp->Release(); } SysFreeString(bstrName); pPropSet->Release(); } return(hr); } HRESULT GetCaption(ISWbemObject* pObject, BSTR* pbstrCaption) { assert(!IsBadWritePtr(pbstrCaption, sizeof(*pbstrCaption))); *pbstrCaption = NULL; VARIANT var; VariantInit(&var); HRESULT hr = GetObjectProperty(pObject, L"Caption", &var); if(FAILED(hr)) return(hr); if(SUCCEEDED((hr = VariantChangeType(&var, &var, 0, VT_BSTR)))) if(NULL == (*pbstrCaption = SysAllocString(V_BSTR(&var)))) hr = E_OUTOFMEMORY; VariantClear(&var); return(hr); } HRESULT GetDHCPEnabled(ISWbemObject* pObject, BOOL* pbEnabled) { assert(!IsBadWritePtr(pbEnabled, sizeof(*pbEnabled))); VARIANT var; VariantInit(&var); HRESULT hr = GetObjectProperty(pObject, L"DHCPEnabled", &var); if(FAILED(hr)) return(hr); if(SUCCEEDED((hr = VariantChangeType(&var, &var, 0, VT_BOOL)))) *pbEnabled = (V_BOOL(&var) != VARIANT_FALSE); VariantClear(&var); return(hr); } int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { ISWbemObjectSet* pObjectSet = NULL; ISWbemServices* pServices = NULL; ISWbemObject* pObject = NULL; IEnumVARIANT* pEnum = NULL; IUnknown* pUnk = NULL; VARIANT varItem; HRESULT hr; BSTR bstrClass; CoInitialize(NULL); if(SUCCEEDED(CoGetObject(OLESTR("winmgmts:"), NULL, IID_ISWbemServices, (void**)&pServices))) { bstrClass = SysAllocString(OLESTR("Win32_NetworkAdapterConfiguration")); if(SUCCEEDED(pServices->InstancesOf(bstrClass, 0, NULL, &pObjectSet))) { if(SUCCEEDED(pObjectSet->get__NewEnum(&pUnk))) { if(SUCCEEDED(pUnk->QueryInterface(IID_IEnumVARIANT, (void**)&pEnum))) { while(S_OK == pEnum->Next(1, &varItem, NULL)) { if(FAILED(VariantChangeType(&varItem, &varItem, 0, VT_UNKNOWN))) { VariantClear(&varItem); continue; } pObject = NULL; hr = V_UNKNOWN(&varItem)->QueryInterface(IID_ISWbemObject, (void**)&pObject); VariantClear(&varItem); if(FAILED(hr)) continue; BSTR bstrCaption; BOOL bEnabled; GetCaption(pObject, &bstrCaption); GetDHCPEnabled(pObject, &bEnabled); WCHAR szMessage[256]; wsprintfW(szMessage, L"DHCPEnabled = %u", bEnabled); MessageBoxW(NULL, szMessage, bstrCaption, MB_OK); SysFreeString(bstrCaption); pObject->Release(); } pEnum->Release(); } pUnk->Release(); } pObjectSet->Release(); } SysFreeString(bstrClass); pServices->Release(); } CoUninitialize(); return(0); }
-
Also bei mir geht der Code ohne Probleme...
-
Sorry aber wie hast du es zum laufen gekriegt. Bei mir kommt keine Fehlermeldung aber es macht nicht. Hast du vielleicht eine Ahnung weshalb. Vorschläge. Finde auch keine Fehler.

-
Jochen Kalmbach schrieb:
Also bei mir geht der Code ohne Probleme...
Sorry die Frage galt dir hatte vergessen dein Beitrag zu setzen.
-
Ich hab VS2003...
-
DHCP (off/server/client) rausfinden - bc++ builder 5
-
DHCP (off/server/client) rausfinden - bc++ builder 5
-
Dobi schrieb:
jetzt frag ich mich, warum das ein array is, und kein normaler string.
Da einem Netzwerkadapter mehrere IP-Adressen zugeorndet sein können.
Dobi schrieb:
normal muesste das vom inhalt und der art wie man es behandelt doch genau wie string DHCPServer; sein, oder?
Eben nicht (vielleicht auf Deinem Heim-PC... aber Server haben oft mehrere).
Dobi schrieb:
also jetzt meine frage: wie komme ich an die ip adresse ran?
Mit den SafeArray... Funktionen:
http://msdn.microsoft.com/library/en-us/automat/html/28a00e34-3b5e-4a16-9f4c-dd2a72dc8e46.asp
-
DHCP (off/server/client) rausfinden - bc++ builder 5
-
HRESULT GetIPAddresses(ISWbemObject* pObject) { VARIANT var; VariantInit(&var); HRESULT hr = GetObjectProperty(pObject, L"IPAddress", &var); if(FAILED(hr)) return(hr); if (V_VT(&var) == (VT_ARRAY | VT_VARIANT)) { SAFEARRAY *psa = var.parray; hr = SafeArrayLock(psa); if (FAILED(hr)) return hr; LONG lLbound; hr = SafeArrayGetLBound(psa, 1, &lLbound); if (SUCCEEDED(hr)) { LONG lUbound; hr = SafeArrayGetUBound(psa, 1, &lUbound); if (SUCCEEDED(hr)) { for(LONG idx=lLbound; idx<=lUbound; idx++) { VARIANT *pVar; if (FAILED(SafeArrayPtrOfIndex(psa, &idx, (void**) &pVar))) continue; VARIANT var; VariantInit(&var); if(SUCCEEDED((hr = VariantChangeType(&var, pVar, 0, VT_BSTR)))) { wprintf(L"%s", V_BSTR(&var)); } } } } SafeArrayUnlock(psa); } VariantClear(&var); return(hr); }