다음을 통해 공유


JET_USERDEFINEDDEFAULT 구조체

적용 대상: Windows | Windows Server

JET_USERDEFINEDDEFAULT 구조체

JET_USERDEFINEDDEFAULT 구조체는 JET_bitColumnUserDefinedDefault 함께 지정되어 새 열에 콜백을 사용하여 결정되는 기본값을 제공합니다. 이 기술은 계산 열을 구현하는 데 사용할 수 있습니다.

Windows XP:JET_USERDEFINEDDEFAULT 구조체는 Windows XP에 도입되었습니다.

    typedef struct tag_JET_USERDEFINEDDEFAULT {
      tchar* szCallback;
      unsigned char* pbUserData;
      unsigned long cbUserData;
      tchar* szDependantColumns;
    } JET_USERDEFINEDDEFAULT;

멤버

szCallback

콜백을 "module!function" 형식으로 구현하는 함수의 내보내기 이름입니다.

콜백은 열 스키마의 일부로 유지됩니다. 런타임에 함수의 실제 주소를 조회할 수 있도록 하려면 함수의 실제 호스트 실행 파일 및 내보내기 이름이 유지되어야 합니다.

모듈 이름은 함수를 포함하는 호스트 이진 파일의 이름입니다. 함수 이름은 해당 함수에 대한 내보내기의 이름입니다. 이러한 두 가지 정보는 런타임에 데이터베이스 엔진에서 모듈 이름에 LoadLibrary 호출을 실행한 다음 함수 이름에 대한 GetProcAddress 호출을 실행하여 콜백의 실제 주소를 찾는 데 사용됩니다.

예를 들어 콜백이 MyCallback.DLL 라는 DLL에서 구현되고 DLL이 C:\MyApplication에 저장되고 콜백을 구현하는 함수가 DLL에서 UserDefinedDefaultCallback으로 내보내진 경우 필요한 문자열은 "C:\MyApplication\MyCallback.DLL! UserDefinedDefaultCallback".

참고 콜백 이름의 모듈 부분에 포함된 "!" 문자는 지원되지 않습니다.

호스트 아키텍처의 함수가 아닌 콜백 이름을 사용하는 것이 좋습니다. 예를 들어 이 호출 규칙은 x86 컴퓨터에서만 지원되므로 stdcall(UserDefinedDefaultCallback@32)으로 데코레이트된 내보내기를 사용하지 마세요. 이러한 콜백을 사용하는 경우 데이터베이스는 x86 컴퓨터에서만 사용할 수 있습니다. 이 경우 별칭을 사용하여 플랫폼에 구애받지 않은 내보내기를 만들어야 합니다.

콜백을 구현하는 모듈 이름의 전체 경로를 사용하는 것이 좋습니다. 상대 경로를 사용하는 경우 데이터베이스를 호스팅하는 프로세스는 불량 이진 파일의 공격에 취약할 수 있습니다.

애플리케이션은 신뢰할 수 있는 콜백만 데이터베이스 엔진에 전달해야 합니다. 데이터베이스 엔진은 이진 파일을 로드하여 연결된 열을 만들 때 해당 존재 여부를 확인합니다. 이진 파일의 경로가 유효성이 검사되지 않았거나 신뢰할 수 있는 것으로 알려진 경우 데이터베이스를 호스팅하는 프로세스를 공격할 수 있습니다.

pbUserData

호출 시 콜백에 전달할 사용자 정의 데이터의 자체 포함 블록입니다. 제공된 데이터 블록은 열 스키마의 일부로 유지됩니다. 따라서 데이터 블록은 완전히 자체 포함되어야 하며 데이터베이스의 scope 외부에 있는 데이터를 참조할 수 없습니다.

pbUserData가 0이면 cbUserData 값이 무시됩니다. 이 경우 호출될 때 사용자 정의 데이터가 콜백에 전달되지 않습니다.

cbUserData

pbUserData를 참조하세요.

szDependantColumns

다음에 사용하도록 예약됩니다.

이 멤버는 항상 NULL로 설정해야 합니다.

요구 사항

요구 사항

클라이언트

Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다.

서버

Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다.

머리글

Esent.h에 선언되었습니다.

유니코드

JET_ USERDEFINEDDEFAULT_W(유니코드) 및 ANSI(JET_ USERDEFINEDDEFAULT_A)로 구현됩니다.

참고 항목

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF