정보: IDirectorySearch::GetNextRow 호출 시 결과가 잘리지

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

325189
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
요약
IDirectorySearch::GetNextRow이 함수에 대한 MSDN 설명서에 완전하지 않습니다. 반환 값은 S_ADS_NOMORE_ROWS에 대한 설명을 false 입니다. 이 코드는 현재 행에 있는 마지막 행 및 변경되지 않은 것으로 남아"의미하는 것은 아닙니다. 대신, "이제 현재 행이 마지막 행.", 설명은 말할 합니다 이 실제로 마지막 행이 있는지 알려면 ADsGetLastError 호출할 수 있습니다. "

실패한 각 작업에 대해 ADSI ADsGetLastError 사용하여 쿼리할 수 있는 확장된 오류 코드를 설정합니다. 이 확장 오류 개발자에 의해 처리되는 경우 모든 행이 처리된 전에 검색 작업에서 중간에 결론을 내릴 수 있습니다. Microsoft Windows 2000용 최신 서비스 팩에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
260910최신 Windows 2000 서비스 팩을 구하는 방법
추가 정보
S_ADS_NOMORE_ROWS IDirectorySearch::GetNextRow 함수가 반환될 때 이를 모든 데이터를 서버에서 검색할 가질 수 없습니다. 경우에 따라서는 S_ADS_NOMORE_ROWS 서버에 있는 미리 정의된 2 분 제한 시간 내에서 검색 조건에 일치하는 항목을 찾을 수 없습니다. GetNextRow 함수에 의해 반환됩니다. 이 분 시간 제한은 LDAP 정책은 통해 정의됩니다. LDAP 정책에 대한 자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
315071방법: 보기 및 Ntdsutil.exe를 사용하여 LDAP 정책 설정
서버에서 2 분 시간 제한을 초과하는 경우 검색을 다시 시작할 수 있도록 이를 LDAP 쿠키가 응답에 이를 중지했던 반환합니다. 비효율적인 검색과 과도하게 로드된 시스템 시간 제한을 초과하면 서버로 인해 발생할 수 있습니다. 검색할 효율적인 인덱스 서버를 찾을 수 없을 때 서버가 해당 디렉터리의 모든 개체에 필터를 적용할 수 있을 수 있습니다 경우 이를 통해 많은 항목을 실행하고 있습니다 2 분 제한 시간 내에서 일치하는 항목을 찾을 수 없습니다.

따라서 S_ADS_NOMORE_ROWS 반환할 때 ADSI 또한 ADsGetLastError 함수를 사용하여 쿼리할 수 있는 확장된 오류 코드를 설정합니다. ERROR_MORE_DATA ADsGetLastError 반환하는 경우 서버 쿼리가 완료되지 않은 및 GetNextRow 다시 호출해야 의미합니다.

The Platform SDK sample file, DsSrch, can be modified to handle this search method as shown in the following code sample:
"MAIN.CXX" file//------------------------------------------------------------------// //  Function:   Q325189_GetNextRow// //  Synopsis:// //------------------------------------------------------------------HRESULT Q325189_GetNextRow(IDirectorySearch *pDSSearch, ADS_SEARCH_HANDLE hSearchHandle){	HRESULT hr = S_OK;	DWORD dwADsExtError = ERROR_SUCCESS;	WCHAR szErrorBuf[512];	WCHAR szNameBuf[128];	do	{		// Clear ADSI extended error		dwADsExtError = ERROR_SUCCESS;		ADsSetLastError(ERROR_SUCCESS, NULL, NULL);		// Next row		hr = pDSSearch->GetNextRow(hSearchHandle);		BAIL_ON_FAILURE(hr);		// Check ADSI extend error if we got S_ADS_NOMORE_ROWS		if (S_ADS_NOMORE_ROWS == hr)		{			hr = ADsGetLastError(&dwADsExtError, szErrorBuf, 512, szNameBuf, 128);			BAIL_ON_FAILURE(hr);			if (ERROR_MORE_DATA != dwADsExtError)				// All data received				return ERROR_NO_DATA;		}	} while (ERROR_MORE_DATA == dwADsExtError);	return ERROR_MORE_DATA;error:	return hr;}//------------------------------------------------------------------// //  Function:   main// //  Synopsis:// //------------------------------------------------------------------INT _CRTAPI1main(int argc, char * argv[]){...	// *** MODIFIED FOR Q325189 *** 	//hr = pDSSearch->GetNextRow(	//         hSearchHandle	//         );	//BAIL_ON_FAILURE(hr);	hr = Q325189_GetNextRow(pDSSearch, hSearchHandle); 	// *** EOM ***	// *** MODIFIED FOR Q325189 *** 	//while (hr != S_ADS_NOMORE_ROWS && nRows < dwMaxRows) {<BR/>         BAIL_ON_FAILURE(hr);	while (nRows < dwMaxRows) {	// *** EOM ***        nRows++;        if (dwNumberAttributes == -1) {            hr = pDSSearch->GetNextColumnName(                     hSearchHandle,                     &pszColumnName                     );            BAIL_ON_FAILURE(hr);            while (hr != S_ADS_NOMORE_COLUMNS) {                hr = pDSSearch->GetColumn(                         hSearchHandle,                         pszColumnName,                         &Column                         );                if (FAILED(hr)  && hr != E_ADS_COLUMN_NOT_SET)                    goto error;                if (SUCCEEDED(hr)) {                    PrintColumn(&Column, pszColumnName);                    pDSSearch->FreeColumn(&Column);                }                FreeADsMem(pszColumnName);                hr = pDSSearch->GetNextColumnName(                         hSearchHandle,                         &pszColumnName                         );                BAIL_ON_FAILURE(hr);            }            printf("\n");        }        else {            for (DWORD i=0; i<dwNumberAttributes; i++) {                hr = pDSSearch->GetColumn(                         hSearchHandle,                         pszAttrNames[i],                         &Column                         );                if (hr == E_ADS_COLUMN_NOT_SET)                    continue;                BAIL_ON_FAILURE(hr);                PrintColumn(&Column, pszAttrNames[i]);                pDSSearch->FreeColumn(&Column);            }        printf("\n");        }	// *** MODIFIED FOR Q325189 ***         //hr = pDSSearch->GetNextRow(        //         hSearchHandle        //         );        //BAIL_ON_FAILURE(hr);		hr = Q325189_GetNextRow(pDSSearch, hSearchHandle); 	// *** END OF MODIFICATION ***    }    wprintf (L"Total Rows: %d\n", nRows);...}				
참조
자세한 내용은 다음 MSDN 웹 사이트를 방문하십시오.
IDirectorySearch GetNextRow S_ADS_NOMORE_ROWS ERROR_MORE_DATA ADsGetLastError 잘렸습니다.

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 325189 - 마지막 검토: 01/17/2015 16:41:44 - 수정: 4.0

Microsoft Active Directory Service Interfaces 2.5, Microsoft Active Directory Service Interfaces 2.5

  • kbnosurvey kbarchive kbmt kbdswadsi2003swept kbwin2ksp4fix kbinfo KB325189 KbMtko
피드백