📄 oid.c
字号:
i->LineCallInfo.hLine = (ULONG)a;
// i->LineCallInfo.ulLineDeviceID = a->miniUlDeviceID;
i->LineCallInfo.ulLineDeviceID = 0;
i->LineCallInfo.ulAddressID = 0;
i->LineCallInfo.ulBearerMode = LINEBEARERMODE_DATA;
i->LineCallInfo.ulRate = a->protoLinkSpeed / 100;
i->LineCallInfo.ulMediaMode = LINEMEDIAMODE_DIGITALDATA;
i->LineCallInfo.ulCallParamFlags = LINECALLPARAMFLAGS_IDLE;
i->LineCallInfo.ulCallStates = a->miniSupportedCallStates;
FLEAVE("queryTapiGetCallInfo");
return NDIS_STATUS_SUCCESS;
}
// OID_TAPI_GET_ADDRESS_CAPS
static NDIS_STATUS queryTapiGetAddressCaps(PADAPT a, PDATABUF_DESCR buf) {
NDIS_TAPI_GET_ADDRESS_CAPS *i;
static char addr_str[] = "0 1 0";
FENTER("queryTapiGetAddressCaps");
i = (NDIS_TAPI_GET_ADDRESS_CAPS *)buf->data;
DbgPrint("DeviceId : 0x%x, AddressId : 0x%x, extvers: %d\n",
i->ulDeviceID, i->ulAddressID, i->ulExtVersion);
if (i->ulDeviceID != a->miniUlDeviceID) {
DbgPrint("wrong ulDeviceID\n");
FLEAVE("queryTapiGetAddressCaps");
return NDIS_STATUS_TAPI_NODRIVER;
}
if (i->ulAddressID != 0) {
DbgPrint("wrong ulAddressID\n");
FLEAVE("queryTapiGetAddressCaps");
return NDIS_STATUS_TAPI_INVALADDRESSID;
}
i->LineAddressCaps.ulNeededSize = sizeof(i->LineAddressCaps);
i->LineAddressCaps.ulUsedSize = sizeof(i->LineAddressCaps);
i->LineAddressCaps.ulLineDeviceID = i->ulDeviceID;
// RASTAPI requires the "I L A" be placed in the Address field at the end
// of this structure. Where:
// I = The device intance assigned to this adapter in the registry
// \LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\I
// L = The device line number associated with this line (1..NumLines)
// A = The address (channel) to be used on this line (0..NumAddresses-1)
i->LineAddressCaps.ulNeededSize += 5;
if (i->LineAddressCaps.ulNeededSize <= i->LineAddressCaps.ulTotalSize)
{
i->LineAddressCaps.ulAddressSize = 5;
i->LineAddressCaps.ulAddressOffset = sizeof(i->LineAddressCaps);
NdisMoveMemory((PUCHAR) &i->LineAddressCaps +
i->LineAddressCaps.ulAddressOffset,
addr_str, 5);
i->LineAddressCaps.ulUsedSize += 5;
}
// Return the various address capabilites for the adapter.
i->LineAddressCaps.ulAddressSharing = LINEADDRESSSHARING_PRIVATE;
i->LineAddressCaps.ulAddressStates = 0;
i->LineAddressCaps.ulCallStates = a->miniSupportedCallStates;
i->LineAddressCaps.ulDialToneModes = LINEDIALTONEMODE_UNAVAIL;
i->LineAddressCaps.ulSpecialInfo = LINESPECIALINFO_UNAVAIL;
i->LineAddressCaps.ulDisconnectModes =
LINEDISCONNECTMODE_BUSY |
LINEDISCONNECTMODE_NORMAL |
LINEDISCONNECTMODE_UNKNOWN |
LINEDISCONNECTMODE_NOANSWER;
// This device does not support conference calls, transfers, or holds.
i->LineAddressCaps.ulMaxNumActiveCalls = 1;
i->LineAddressCaps.ulMaxNumTransConf = 1;
i->LineAddressCaps.ulAddrCapFlags = LINEADDRCAPFLAGS_DIALED;
i->LineAddressCaps.ulCallFeatures =
LINECALLFEATURE_DIAL |
LINECALLFEATURE_DROP;
FLEAVE("queryTapiGetAddressCaps");
return NDIS_STATUS_SUCCESS;
}
// OID_TAPI_PROVIDER_INITIALIZE
static NDIS_STATUS queryTapiProviderInitialize(PADAPT a, PDATABUF_DESCR buf) {
NDIS_TAPI_PROVIDER_INITIALIZE *i;
FENTER("queryTapiProviderInitialize");
i = (NDIS_TAPI_PROVIDER_INITIALIZE *)buf->data;
// we have only one device so DeviceID = DeviceIDBase
a->miniUlDeviceIDBase = i->ulDeviceIDBase;
a->miniUlDeviceID = i->ulDeviceIDBase;
DbgPrint("ulDeviceIDBase: 0x%x\n", a->miniUlDeviceIDBase);
i->ulNumLineDevs = 1;
i->ulProviderID = (ULONG)a;
FLEAVE("queryTapiProviderInitialize");
return NDIS_STATUS_SUCCESS;
}
// OID_WAN_GET_INFO
static NDIS_STATUS queryWanGetInfo(PADAPT a, PDATABUF_DESCR buf) {
NDIS_WAN_INFO *i;
FENTER("queryWanGetInfo");
i = (NDIS_WAN_INFO *)buf->data;
// i->MaxFrameSize = 1492;
i->MaxFrameSize = 1460;
i->MaxTransmit = 10;
i->HeaderPadding = 6 + 14 - 2; // - 2 because we will overwrite ADDRESS CONTROL field of PPP packet
i->TailPadding = 0;
i->Endpoints = 1;
i->MemoryFlags = 0;
i->HighestAcceptableAddress = MaxAddress;
i->FramingBits = PPP_FRAMING | TAPI_PROVIDER;
i->DesiredACCM = 0;
FLEAVE("queryWanGetInfo");
return NDIS_STATUS_SUCCESS;
}
// OID_WAN_CURRENT_ADDRESS
static NDIS_STATUS queryWanCurrentAddress(PADAPT a, PDATABUF_DESCR buf) {
FENTER("queryWanCurrentAddress");
NdisMoveMemory(buf->data, a->protoMacAddr, 6);
((PUCHAR)buf->data)[2] = ~((PUCHAR)buf->data)[2];
FLEAVE("queryWanCurrentAddress");
return NDIS_STATUS_SUCCESS;
}
// OID_GEN_SUPPORTED_LIST
static NDIS_STATUS queryGenSupportedList(PADAPT a, PDATABUF_DESCR buf) {
NDIS_OID prev = 0;
NDIS_OID smallest = (ULONG)-1;
PULONG ptr;
ULONG c = 0;
POID_HANDLER h;
FENTER("queryGenSupportedList");
// count OIDs
for (h = queryOids; h->handler != NULL; h++) ++c;
for (h = setOids; h->handler != NULL; h++) ++c;
if (buf->len < c * 4) {
DbgPrint("not enough buffer space: %d, needed: %d\n", buf->len, c * 4);
*(buf->bytesNeeded) = c * 4;
FLEAVE("queryGenSupportedList");
return NDIS_STATUS_INVALID_LENGTH;
}
// sort and report oids;
ptr = (PULONG)buf->data;
c = 0;
DbgPrint("supported list: ");
while (1) {
int found = 0;
for (h = queryOids; h->handler != NULL; h++) {
if (h->oid < smallest && h->oid > prev) {
smallest = h->oid;
found = 1;
}
}
for (h = setOids; h->handler != NULL; h++) {
if (h->oid < smallest && h->oid > prev) {
smallest = h->oid;
found = 1;
}
}
if (found == 0) break;
DbgPrint("0x%x ", smallest);
*ptr = smallest;
++ptr;
c += 4;
prev = smallest;
smallest = (ULONG)-1;
}
DbgPrint("\n");
*(buf->bytesUsed) = c;
*(buf->bytesNeeded) = c;
FLEAVE("queryGenSupportedList");
return NDIS_STATUS_SUCCESS;
}
// OID_WAN_MEDIUM_SUBTYPE
static NDIS_STATUS queryWanMediumSubtype(PADAPT a, PDATABUF_DESCR buf) {
FENTER("queryWanMediumSubtype");
*((PULONG)(buf->data)) = NdisWanMediumIsdn;
FLEAVE("queryWanMediumSubtype");
return NDIS_STATUS_SUCCESS;
}
// OID_GEN_MAC_OPTIONS
static NDIS_STATUS queryGenMacOptions(PADAPT a, PDATABUF_DESCR buf) {
FENTER("queryGenMacOptions");
*((PULONG)(buf->data)) = NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA | NDIS_MAC_OPTION_NO_LOOPBACK;
FLEAVE("queryGenMacOptions");
return NDIS_STATUS_SUCCESS;
}
static NDIS_STATUS queryAnyNewOid(PADAPT a, PDATABUF_DESCR buf) {
FENTER("queryAnyNewOid");
DbgPrint("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
FLEAVE("queryAnyNewOid");
return NDIS_STATUS_SUCCESS;
}
static NDIS_STATUS queryAnyNewWanOid(PADAPT a, PDATABUF_DESCR buf) {
FENTER("queryAnyNewWanOid");
DbgPrint("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
FLEAVE("queryAnyNewWanOid");
return NDIS_STATUS_SUCCESS;
}
static NDIS_STATUS queryAnyNewTapiOid(PADAPT a, PDATABUF_DESCR buf) {
FENTER("queryAnyNewTapiOid");
DbgPrint("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
FLEAVE("queryAnyNewTapiOid");
return NDIS_STATUS_SUCCESS;
}
static NDIS_STATUS setAnyNewOid(PADAPT a, PDATABUF_DESCR buf) {
FENTER("setAnyNewOid");
DbgPrint("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
FLEAVE("setAnyNewOid");
return NDIS_STATUS_SUCCESS;
}
static NDIS_STATUS setAnyNewWanOid(PADAPT a, PDATABUF_DESCR buf) {
FENTER("setAnyNewWanOid");
DbgPrint("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
FLEAVE("setAnyNewWanOid");
return NDIS_STATUS_SUCCESS;
}
static NDIS_STATUS setAnyNewTapiOid(PADAPT a, PDATABUF_DESCR buf) {
FENTER("setAnyNewTapiOid");
DbgPrint("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n");
FLEAVE("setAnyNewTapiOid");
return NDIS_STATUS_SUCCESS;
}
static NDIS_STATUS queryVendorId(PADAPT a, PDATABUF_DESCR buf) {
FENTER("queryVendorId");
*((PULONG)(buf->data)) = 0xffffff;
FLEAVE("queryVendorId");
return NDIS_STATUS_SUCCESS;
}
OID_HANDLER queryOids[] = {
{OID_GEN_SUPPORTED_LIST, 0, &queryGenSupportedList},
{OID_GEN_MAC_OPTIONS, 4, &queryGenMacOptions},
{OID_WAN_GET_INFO, sizeof(NDIS_WAN_INFO), &queryWanGetInfo},
{OID_WAN_CURRENT_ADDRESS, 6, &queryWanCurrentAddress},
{OID_WAN_MEDIUM_SUBTYPE, 4, &queryWanMediumSubtype},
{OID_TAPI_GET_ADDRESS_CAPS, sizeof(NDIS_TAPI_GET_ADDRESS_CAPS) + 6, &queryTapiGetAddressCaps},
{OID_TAPI_GET_CALL_INFO, sizeof(NDIS_TAPI_GET_CALL_INFO), &queryTapiGetCallInfo},
{OID_TAPI_MAKE_CALL, sizeof(NDIS_TAPI_MAKE_CALL), &queryTapiMakeCall},
{OID_TAPI_OPEN, sizeof(NDIS_TAPI_OPEN), &queryTapiOpen},
{OID_TAPI_SECURE_CALL, 0, &queryTapiSecureCall},
// {OID_TAPI_NEGOTIATE_EXT_VERSION, sizeof (NDIS_TAPI_NEGOTIATE_EXT_VERSION), &queryTapiNegotiateExtVersion},
// {OID_TAPI_GET_EXTENSION_ID, sizeof(NDIS_TAPI_GET_EXTENSION_ID), &queryTapiGetExtensionId},
// Todo: Uncomment for Windows2000
{OID_TAPI_GET_DEV_CAPS, sizeof(NDIS_TAPI_GET_DEV_CAPS) /*+ 19*/, &queryTapiGetDevCaps},
{OID_TAPI_PROVIDER_INITIALIZE, sizeof(NDIS_TAPI_PROVIDER_INITIALIZE), &queryTapiProviderInitialize},
{OID_GEN_HARDWARE_STATUS, 4, &queryAnyNewOid},
{OID_GEN_MEDIA_SUPPORTED, 0, &queryAnyNewOid},
{OID_GEN_MEDIA_IN_USE, 0, &queryAnyNewOid},
{OID_GEN_MAXIMUM_LOOKAHEAD, 4, &queryAnyNewOid},
{OID_GEN_MAXIMUM_FRAME_SIZE, 4, &queryAnyNewOid},
{OID_GEN_LINK_SPEED, 4, &queryAnyNewOid},
{OID_GEN_TRANSMIT_BUFFER_SPACE, 4, &queryAnyNewOid},
{OID_GEN_RECEIVE_BUFFER_SPACE, 4, &queryAnyNewOid},
{OID_GEN_TRANSMIT_BLOCK_SIZE, 4, &queryAnyNewOid},
{OID_GEN_RECEIVE_BLOCK_SIZE, 4, &queryAnyNewOid},
{OID_GEN_VENDOR_ID, 4, &queryVendorId},
{OID_GEN_VENDOR_DESCRIPTION, 0, &queryAnyNewOid},
{OID_GEN_VENDOR_DRIVER_VERSION, 4, &queryAnyNewOid},
{OID_GEN_CURRENT_PACKET_FILTER, 4, &queryAnyNewOid},
{OID_GEN_CURRENT_LOOKAHEAD, 4, &queryAnyNewOid},
{OID_GEN_DRIVER_VERSION, 2, &queryAnyNewOid},
{OID_GEN_MAXIMUM_TOTAL_SIZE, 4, &queryAnyNewOid},
{OID_GEN_MEDIA_CONNECT_STATUS, 4, &queryAnyNewOid},
{OID_GEN_MAXIMUM_SEND_PACKETS, 4, &queryAnyNewOid},
// Hack or sviesc?
{OID_WAN_PERMANENT_ADDRESS, 6, &queryWanCurrentAddress},
{OID_WAN_QUALITY_OF_SERVICE, 4, &queryAnyNewWanOid},
{OID_WAN_GET_LINK_INFO, 4, &queryAnyNewWanOid},
{OID_WAN_LINE_COUNT, 4, &queryAnyNewWanOid},
{OID_TAPI_GET_ADDRESS_ID, 0, &queryAnyNewTapiOid},
{OID_TAPI_GET_ADDRESS_STATUS, 0, &queryAnyNewTapiOid},
{OID_TAPI_GET_CALL_ADDRESS_ID, 0, &queryAnyNewTapiOid},
{OID_TAPI_GET_CALL_STATUS, sizeof(NDIS_TAPI_GET_CALL_STATUS), &queryTapiGetCallStatus},
{OID_TAPI_GET_ID, sizeof(NDIS_TAPI_GET_ID), &queryTapiGetId},
{OID_TAPI_GET_LINE_DEV_STATUS, 0, &queryAnyNewTapiOid},
{0, 0, NULL} // final - NULL oid handler
};
OID_HANDLER setOids[] = {
{OID_TAPI_CLOSE_CALL, sizeof(NDIS_TAPI_CLOSE_CALL), &setTapiCloseCall},
{OID_TAPI_CLOSE, sizeof(NDIS_TAPI_CLOSE), &setTapiClose},
{OID_TAPI_DROP, sizeof(NDIS_TAPI_DROP), &setTapiDrop},
{OID_TAPI_SET_STATUS_MESSAGES, sizeof(NDIS_TAPI_SET_STATUS_MESSAGES), &setTapiSetStatusMessages},
{OID_TAPI_SET_DEFAULT_MEDIA_DETECTION, sizeof(NDIS_TAPI_SET_DEFAULT_MEDIA_DETECTION), &setTapiSetDefaultMediaDetection},
{OID_TAPI_CONDITIONAL_MEDIA_DETECTION, 0, &setAnyNewTapiOid},
{OID_TAPI_ANSWER, 0, &setAnyNewTapiOid},
{OID_TAPI_PROVIDER_SHUTDOWN, 0, &setAnyNewTapiOid},
{OID_TAPI_SET_APP_SPECIFIC, 0, &setAnyNewTapiOid},
{OID_TAPI_SET_CALL_PARAMS, 0, &setAnyNewTapiOid},
{OID_TAPI_SET_MEDIA_MODE, 0, &setAnyNewTapiOid},
{OID_WAN_PROTOCOL_TYPE, 0, &setAnyNewWanOid},
{OID_WAN_HEADER_FORMAT, 4, &setAnyNewWanOid},
{OID_WAN_SET_LINK_INFO, sizeof(NDIS_WAN_SET_LINK_INFO), &setWanSetLinkInfo},
{OID_GEN_CURRENT_PACKET_FILTER, 4, &setAnyNewOid},
{OID_GEN_CURRENT_LOOKAHEAD, 4, &setAnyNewOid},
{OID_GEN_PROTOCOL_OPTIONS, 4, &setAnyNewOid},
{0, 0, NULL} // final - NULL oid handler
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -