TDPUSECモジュールをカスタマイズする場合は、次の点について考慮します。
- TDPUSECはTDPの一部として稼動するので、権限が付与される。コーディングが不適切な場合は、エラーになったり、TDPが破壊されたりすることさえある。
- このモジュールは、TDP提供の、MACLIBおよびSAMPLIB(Teradataソフトウェアのリリース テープにある)で記述されたデータ制御ブロック中のデータだけにアクセスできる。他のTDPコンポーネントにはアクセスできない。
- TDPUSECモジュールは、最も標準的なOSサービスを直接使用できる。TDPUSECの呼び出し側TDPに該当する戻りコードを渡して、WTO、WTL、およびSMFWTMサービスを呼び出す必要がある。
- TDPUSECルーチンが異常終了すると、TDPエラー回復時にTDPUSECが使用不能になり、省略時の処置(SMFレコード、ログ メッセージ、システム オペレータ メッセージ、およびエラー戻りコードを違反ユーザーに戻す)が取られるが、いったん問題が解決すると、TDP ENABLE USECコマンドを使用して再び有効化できるようになる。
ダンプは、z/OSではTDPSNAP DDNameに書き込まれる。出口にタスクが付加され、サブタスクが正常に終了しなかった場合、TDPはエラーを処理しない。つまり、出口が無効になり、TDPによるダンプの書き込みは行なわれない。ただし、標準のリソースが使用可能な場合(z/OSのSYSUDUMP DD文など)、オペレーティング システムはダンプを記録できる。サブタスクの正しい管理は出口が行なうため、そのようなエラーが発生しても操作に支障はない。
- TDPUSECは、TDP下で単一スレッド ルーチンとして稼動し、要求を一度に1つだけ処理できる。したがって、そのルーチンと残りのTDPとの互換性を図るには、そのルーチンは少なくとも逐次再使用可能または再入可能でなければならない。
- TDPUSECは独自のテーブルを保存できる。パラメータ リストの一部として、必ず単一のワードがTDPUSECとTDPの間で渡される。このワードを使用して、呼び出し中に必要となる情報を含むストレージのブロックを指すことができる。このワードを使用するためには、いずれもTDPUSECのオプションで指定する。
- TDPUSECはTDPのサブルーチンなので、呼び出された場合に標準OS形式でレジスターの保存と復元を行なわなければならない。TDPUSEC以外のサービスも呼び出される場合は、このルーチンは独自の保存領域を設けなければならず、汎用レジスター14に渡されたアドレスに戻らなければならない。
制御権はTDPUSECルーチンに渡され、その際、汎用レジスター1がTDPUSPRM制御ブロックを指す。この制御ブロックには関数コード、ユーザー ワード、および失敗した要求に関する情報があるフィールドを指すポインタが含まれる。
戻り時にTDPUSECは、次のいずれかのTDP処置を要求する戻りコードを汎用レジスター15に渡します。
- 何も行なわないが、エラー コードを呼出し側に戻す。
- z/OSの場合、セキュリティ コンソールにWTOを発行する。
- (z/OS)メッセージをシステム ログに書き込み、エラー コードを呼び出し側に戻す。
- (z/OS)TDPセキュリティ違反SMFレコードを書き込み、エラー コードを呼び出し側に戻す。
- (z/OS)呼び出し側を(メモリ間ABTERMを使用して)異常終了する。
上記のオプションの任意の組み合わせを選択することもできます。
しかし、最後のオプションを選択すると、失敗メッセージは呼出し側に戻されずに破棄されます。