โครงสร้างของEXTENSION_CONTROL_BLOCKมีแบบฟอร์มต่อไปนี้:
typedef struct _EXTENSION_CONTROL_BLOCK {
DWORD cbSize; //IN
DWORD dwVersion //IN
HCONN ConnID; //IN
DWORD dwHttpStatusCode; //OUT
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; //OUT
LPSTR lpszMethod; //IN
LPSTR lpszQueryString; //IN
LPSTR lpszPathInfo; //IN
LPSTR lpszPathTranslated; //IN
DWORD cbTotalBytes; //IN
DWORD cbAvailable; //IN
LPBYTE lpbData; //IN
LPSTR lpszContentType; //IN
BOOL ( WINAPI * GetServerVariable )
( HCONN hConn,
LPSTR lpszVariableName,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * WriteClient )
( HCONN ConnID,
LPVOID Buffer,
LPDWORD lpdwBytes,
DWORD dwReserved );
BOOL ( WINAPI * ReadClient )
( HCONN ConnID,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * ServerSupportFunction )
( HCONN hConn,
DWORD dwHSERRequest,
LPVOID lpvBuffer,
LPDWORD lpdwSize,
LPDWORD lpdwDataType );
} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_BLOCK;
เซิร์ฟเวอร์ที่มีการสื่อสารกับ ISA ที่ผ่านEXTENSION_CONTROL_BLOCK?
การอ้างอิงในการเข้าและออกข้างต้นบ่งชี้ว่า สมาชิกนำไปใช้กับข้อความ เพื่อใช้ส่วนขยาย (IN) หรือ จากส่วนขยาย (OUT)?
สมาชิก
โครงสร้างของEXTENSION_CONTROL_BLOCKประกอบด้วยเขตข้อมูลต่อไปนี้:
cbSize
ขนาดของโครงสร้างนี้?
dwVersion
Ofnbsp ข้อมูลรุ่น HTTP_FILTER_REVISION HIWORDมีหมายเลขรุ่นหลัก และLOWORDมีหมายเลขรุ่นรอง(&N)?
ConnID
nbspหมายเลขเฉพาะที่กำหนด โดยเซิร์ฟเวอร์ HTTP จะต้องไม่ถูกปรับเปลี่ยน(&N)?
dwHttpStatusCode
สถานะของธุรกรรมปัจจุบันที่เมื่อเสร็จสิ้นการร้องขอ อาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้:
lpszLogData
บัฟเฟอร์มีขนาดHSE_LOG_BUFFER_LEN ประกอบด้วยการหยุดการทำงานเป็น null ล็อกข้อมูลสต ISA ของธุรกรรมปัจจุบันเฉพาะ ข้อมูลการล็อกนี้จะถูกป้อนในล็อกเซิร์ฟเวอร์ HTTP รักษาบันทึกแฟ้มเดียวกับทั้งเซิร์ฟเวอร์ HTTP และธุรกรรม ISA เป็นประโยชน์อย่างมากสำหรับการดูแล?
lpszMethod
วิธีการที่ถูกทำการร้องขอ นี้จะเท่ากับตัวแปร CGI REQUEST_METHOD?
lpszQueryString
nbspสิ้นสุดด้วย null สายประกอบด้วยการสอบถามข้อมูล นี้จะเท่ากับตัวแปร CGI QUERY_STRING(&N)?
lpszPathInfo
สิ้นสุดด้วย null สายประกอบด้วยข้อมูลเกี่ยวกับเส้นทางพิเศษที่กำหนด โดยไคลเอ็นต์ นี้จะเท่ากับตัวแปร CGI PATH_INFO?
lpszPathTranslated
สิ้นสุดด้วย null สายประกอบด้วยเส้นทางที่แปล นี้จะเท่ากับตัวแปร CGI PATH_TRANSLATED?
cbTotalBytes
จำนวนไบต์ที่จะได้รับจากไคลเอ็นต์ นี่คือเท่ากับตัวแปร CGI CONTENT_LENGTH ถ้าค่านี้เป็น 0xffffffff แล้วมีกิกะไบต์สี่หรือมากกว่ามี data.nbsp ในกรณีนี้CHttpServerContext::ReadClientควรเรียกจนกระทั่งมีการส่งคืนไม่มีข้อมูลเพิ่มเติม(&N)?
cbAvailable
มีจำนวนไบต์ (จากทั้งหมดของcbTotalBytes) ในบัฟเฟอร์ชี้ไปตามlpbData ถ้าcbTotalBytesเหมือนกันเป็นcbAvailableตัวแปรlpbDataจะชี้ไปที่การบัฟเฟอร์ที่ประกอบด้วยข้อมูลทั้งหมดถูกส่ง โดยไคลเอ็นต์ มิฉะนั้นcbTotalBytesจะประกอบด้วยจำนวนไบต์ของข้อมูลที่ได้รับ ISA จำเป็นต้องใช้ฟังก์ชันเรียกกลับCHttpServerContext::ReadClientการอ่านส่วนเหลือของข้อมูล (การเริ่มต้นจากการออฟเซตของcbAvailable) แล้ว?
lpbData
ประเด็นการบัฟเฟอร์ของขนาดcbAvailableที่มีข้อมูลถูกส่ง โดยไคลเอ็นต์?
lpszContentType
สิ้นสุดด้วย null สายประกอบด้วยชนิดเนื้อหาของข้อมูลที่ส่ง โดยไคลเอ็นต์ นี้จะเท่ากับตัวแปร CGI CONTENT_TYPE?
GetServerVariable
ฟังก์ชันนี้คัดลอกข้อมูล (รวมถึงตัวแปร CGI) เกี่ยวข้องกับ การเชื่อมต่อแบบ HTTP หรือเซิร์ฟเวอร์เอง ลงในบัฟเฟอร์ GetServerVariableใช้พารามิเตอร์ต่อไปนี้:
| ชื่อตัวแปร | คำอธิบาย |
| ALL_HTTP | ส่วน HTTP หัวทั้งหมดที่ถูกไม่ได้วิเคราะห์เป็นหนึ่งในตัวแปรด้านบน ตัวแปรเหล่านี้มีฟอร์ม HTTP_lt ชื่อเขตข้อมูลหัวข้อ & gt? |
| AUTH_PASS | นี้จะดึงข้อมูลรหัสผ่านที่สอดคล้องกับREMOTE_USERตามมา โดยไคลเอ็นต์ มันจะเป็นสตริงที่สิ้นสุดด้วยค่า null? |
| AUTH_TYPE | ประกอบด้วยชนิดของการรับรองความถูกต้อง used.nbsp ตัวอย่างเช่น ถ้ามีใช้การรับรองความถูกต้องพื้นฐาน สตริจะ "Basic" สำหรับ Windows NT Challenge-ตอบ ก็จะเป็น "NTLM" อื่น ๆ โครงร่างของการรับรองความถูกต้องจะมีสายอื่น ๆ เนื่องจากชนิดการรับรองความถูกต้องใหม่สามารถเพิ่มลงใน Internet Server ไม่สามารถเพื่อแสดงรายชื่อทุกสายอักขระที่เป็นไป ถ้าสตริงที่ว่างเปล่า แล้วไม่มีการรับรองความถูกต้องถูกใช้(&N)? |
| CONTENT_LENGTH | จำนวนไบต์ที่สคริปต์คาดว่าจะได้รับจากไคลเอ็นต์? |
| CONTENT_TYPE | ชนิดเนื้อหาของข้อมูลที่ให้ไว้ในเนื้อความของคำขอ POST? |
| GATEWAY_INTERFACE | ตรวจทานแก้ไขของสเปค CGI ซึ่งเซิร์ฟเวอร์นี้สอดคล้อง รุ่นปัจจุบันคือ CGI/1.1? |
| HTTP_ACCEPT | หัวข้อพิเศษกรณี HTTP ค่าของการยอมรับ: เขตข้อมูลมี concatenated คั่นด้วย ตัวอย่างเช่น ถ้าบรรทัดต่อไปนี้เป็นส่วนหนึ่งของส่วนหัว HTTP
แล้ว ตัวแปรHTTP_ACCEPTจะมีค่าเป็น:
|
| PATH_INFO | เพิ่มเติมข้อมูลเส้นทาง กำหนดโดยไคลเอ็นต์ ประกอบนี้ด้วยส่วนต่อท้ายของ URL หลังชื่อสคริปต์ แต่ก่อนที่ จะสายอักขระแบบสอบถาม (ถ้ามี)? |
| PATH_TRANSLATED | นี่คือค่า PATH_INFO แต่ ด้วยชื่อเส้นทางเสมือนการขยายเข้าไปในไดเรกทอรีสเปคจะ? |
| QUERY_STRING | ข้อมูลที่ตามหลัง?ใน URL ที่อ้างอิงถึงสคริปต์นี้? |
| REMOTE_ADDR | อยู่ IP ของไคลเอ็นต์? |
| REMOTE_HOST | ชื่อโฮสต์ของไคลเอ็นต์? |
| REMOTE_USER | นี้ประกอบด้วยชื่อผู้ใช้ให้มา โดยไคลเอนต์ และรับรอง โดยเซิร์ฟเวอร์? |
| REQUEST_METHOD | วิธีการร้องขอ HTTP? |
| SCRIPT_NAME | ชื่อของโปรแกรมสคริปต์กำลังดำเนินการ? |
| SERVER_NAME | ของเซิร์ฟเวอร์ชื่อโฮสต์ (หรือที่อยู่ IP) เป็นควรปรากฏขึ้นใน self-referencing Url? |
| SERVER_PORT | พอร์ต TCP/IP ซึ่งได้รับการร้องขอ? |
| SERVER_PROTOCOL | ชื่อและรุ่นของโพรโทคอลในการเรียกข้อมูลที่เกี่ยวข้องกับคำขอนี้ โดยปกติ HTTP/1.0? |
| SERVER_SOFTWARE | ชื่อและรุ่นของเว็บเซิร์ฟเวอร์ที่เรียกใช้โปรแกรม CGI? |
WriteClient
ส่งข้อมูลไปยังไคลเอ็นต์จากบัฟเฟอร์ที่ระบุ WriteClientใช้พารามิเตอร์ต่อไปนี้:
ReadClient
อ่านข้อมูลจากเนื้อความของการร้องขอ HTTP ของไคลเอ็นต์เว็บลงในบัฟเฟอร์ที่ระบุให้ โดยที่ผู้เรียก ReadClientใช้พารามิเตอร์ต่อไปนี้:
ServerSupportFunction
ให้ ISAs ด้วยบางฟังก์ชันกับงานทั่วไปเช่นเดียวกับฟังก์ชันการใช้งานเซิร์ฟเวอร์ HTTP ServerSupportFunctionใช้พารามิเตอร์ต่อไปนี้:
ความคิดเห็น
เซิร์ฟเวอร์ที่ระบุแฟ้มกับ extensionsnbspEXE และBAT เป็น CGI (Common Gateway Interface) executables นอกจากนี้ เซิร์ฟเวอร์จะระบุแฟ้มที่ มีนามสกุล DLL เป็นสคริปต์การดำเนินการ(&N)?
เมื่อเซิร์ฟเวอร์โหลด DLL เรียก DLL ที่จุดที่CHttpServer::GetExtensionVersionเพื่อรับหมายเลขรุ่นของ thenbsp HTTP_FILTER_REVISION ISA จะยึดและคำอธิบายข้อความสั้น ๆ สำหรับผู้ดูแลเซิร์ฟเวอร์ สำหรับทุกคำขอของไคลเอ็นต์ จุดCHttpServer::HttpExtensionProcถูกเรียก นามสกุลได้รับข้อมูลที่จำเป็นประจำเช่นสายอักขระแบบสอบถาม path info ชื่อเมธอด และเส้นทางแปลแล้ว(&N)?
ดูเพิ่มเติมnbspCHttpServerContext::ReadClient, CHttpServer::GetExtensionVersion, CHttpServer::HttpExtensionProc(&N)