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)로 구현됩니다. |