change getStringValue to try EXPANDSZ_METADATA if STRING_METADATA fails

This commit is contained in:
Doug MacEachern 2005-09-23 00:12:58 +00:00
parent 1bc0ecade2
commit 236363efa8
1 changed files with 27 additions and 17 deletions

View File

@ -178,36 +178,46 @@ JNIEXPORT jint SIGAR_JNI(win32_MetaBase_MetaBaseGetIntValue)
JNIEXPORT jstring SIGAR_JNI(win32_MetaBase_MetaBaseGetStringValue) JNIEXPORT jstring SIGAR_JNI(win32_MetaBase_MetaBaseGetStringValue)
(JNIEnv *env, jobject cur, jint key) (JNIEnv *env, jobject cur, jint key)
{ {
int i;
HRESULT hRes = 0; HRESULT hRes = 0;
METADATA_HANDLE MyHandle; METADATA_HANDLE MyHandle;
METADATA_RECORD MyRecord; METADATA_RECORD MyRecord;
DWORD dwBufLen = 8096; DWORD dwBufLen = 8096;
DWORD dwReqBufLen = 0; DWORD dwReqBufLen = 0;
TCHAR pbBuffer[8096]; TCHAR pbBuffer[8096];
DWORD data_types[] = {
STRING_METADATA,
EXPANDSZ_METADATA /* e.g. MD_LOGFILEDIRECTORY */
};
CComPtr <IMSAdminBase> *pIMeta; CComPtr <IMSAdminBase> *pIMeta;
pIMeta = (CComPtr <IMSAdminBase> *)env->GetLongField(cur, IMeta_field); pIMeta = (CComPtr <IMSAdminBase> *)env->GetLongField(cur, IMeta_field);
MyHandle = (METADATA_HANDLE)env->GetIntField(cur, ptr_field); MyHandle = (METADATA_HANDLE)env->GetIntField(cur, ptr_field);
// Initialize the input structure - for (i=0; i<sizeof(data_types)/sizeof(data_types[0]); i++) {
// the values specify what kind of data to enumerate. DWORD dtype = data_types[i];
MyRecord.dwMDIdentifier = key; // Initialize the input structure -
MyRecord.dwMDAttributes = 0; // the values specify what kind of data to enumerate.
MyRecord.dwMDUserType = IIS_MD_UT_SERVER; MyRecord.dwMDIdentifier = key;
MyRecord.dwMDDataType = STRING_METADATA; MyRecord.dwMDAttributes = 0;
MyRecord.dwMDDataLen = dwBufLen; MyRecord.dwMDUserType = IIS_MD_UT_SERVER;
MyRecord.pbMDData = (unsigned char *)pbBuffer; MyRecord.dwMDDataType = dtype;
MyRecord.dwMDDataLen = dwBufLen;
MyRecord.pbMDData = (unsigned char *)pbBuffer;
hRes = (*pIMeta)->GetData(MyHandle, TEXT(""), &MyRecord, &dwReqBufLen); hRes =
if (SUCCEEDED(hRes)) { (*pIMeta)->GetData(MyHandle, TEXT(""), &MyRecord, &dwReqBufLen);
jstring strResult;
// Store the data identifiers in an array for future use. if (SUCCEEDED(hRes)) {
// Note: declare a suitable DWORD array for names and add jstring strResult;
// array bounds checking. // Store the data identifiers in an array for future use.
strResult = env->NewString((const jchar *)MyRecord.pbMDData, // Note: declare a suitable DWORD array for names and add
lstrlen(pbBuffer)); // array bounds checking.
return strResult; strResult = env->NewString((const jchar *)MyRecord.pbMDData,
lstrlen(pbBuffer));
return strResult;
}
} }
jclass cls = env->FindClass(WIN32_PACKAGE "Win32Exception"); jclass cls = env->FindClass(WIN32_PACKAGE "Win32Exception");
env->ThrowNew(cls, "No Such string value"); env->ThrowNew(cls, "No Such string value");