📄 zdwlanadapter.cpp
字号:
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_802_11_BSSID, &cBssid, sizeof(cBssid)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
BinToHexStr((char*)&cBssid, csBSSID_Buffer, 6, 1);
return ZDNDIS_SUCCESS;
//----------------------------------------------------------------------
#else
RID_STRUCT RidStruct;
RidStruct.rid = RID_CURRENT_BSSID; // FD42
RidStruct.length = 4;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
BinToHexStr((char*)&RidStruct.u.data[0], csBSSID_Buffer, 6, 1);
return ZDNDIS_SUCCESS;
#endif
}
INT CZDWlanAdapter::QueryWL_CurrentSSID(PWLADAPTERINFO pWLAdapterInfoIn, char *csSSID_Buffer)
{
RID_STRUCT RidStruct;
csSSID_Buffer[0] = 0; // Set NULL String.
RidStruct.rid = RID_CURRENT_SSID; // Current SSID ==> FD41
RidStruct.length = 18;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
if(RidStruct.u.data[0] > WL_SSID_MAX_LENGTH)
return ZDNDIS_FAIL;
memcpy(csSSID_Buffer, (char*)&RidStruct.u.data[1], RidStruct.u.data[0]);
csSSID_Buffer[RidStruct.u.data[0]] = 0;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_SSID(PWLADAPTERINFO pWLAdapterInfoIn, char *csSSID_Buffer)
{
RID_STRUCT RidStruct;
csSSID_Buffer[0] = 0; // Set NULL String.
RidStruct.rid = RID_CFG_SSID; // cnfDesiredSSID ==> FC02
RidStruct.length = 18;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
if(RidStruct.u.data[0] > WL_SSID_MAX_LENGTH)
return ZDNDIS_FAIL;
memcpy(csSSID_Buffer, (char*)&RidStruct.u.data[1], RidStruct.u.data[0]);
csSSID_Buffer[RidStruct.u.data[0]] = 0;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_SSIDDetail(PWLADAPTERINFO pWLAdapterInfoIn, char *csSSID_Buffer)
{
RID_STRUCT RidStruct;
csSSID_Buffer[0] = 0; // Set NULL String.
RidStruct.rid = RID_CFG_SSID; // cnfDesiredSSID ==> FC02
RidStruct.length = 18;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
if(RidStruct.u.data[0] > WL_SSID_MAX_LENGTH)
return ZDNDIS_FAIL;
memcpy(csSSID_Buffer, (char*)&RidStruct.u.data[1], RidStruct.u.data[0]);
csSSID_Buffer[RidStruct.u.data[0]] = 0;
return ((int)RidStruct.u.data[0]);
}
INT CZDWlanAdapter::SetWL_SSID(PWLADAPTERINFO pWLAdapterInfoIn, char *csSSID_Buffer)
{
//----------------------------------------------------------------------
#if _ACCESS_VIA_802_11_OID == 1
NDIS_802_11_SSID ZDSsid;
ZDSsid.SsidLength = (ULONG)lstrlen(csSSID_Buffer);
memcpy(ZDSsid.Ssid, csSSID_Buffer, ZDSsid.SsidLength);
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD)OID_ZD_802_11_SSID, (PVOID)&ZDSsid, (DWORD)sizeof(ZDSsid)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
//----------------------------------------------------------------------
#else
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_SSID; // cnfDesiredSSID ==> FC02
RidStruct.length = 18;
RidStruct.u.data[0]=(USHORT)lstrlen(csSSID_Buffer);
lstrcpy((char*)&RidStruct.u.data[1], csSSID_Buffer);
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD)OID_ZD_SETRID, (PVOID)&RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
SetWL_RestartNIC(pWLAdapterInfoIn);
return ZDNDIS_SUCCESS;
#endif
}
INT CZDWlanAdapter::QueryWL_Channel(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CURR_CHANNEL; // FDC1 (Phy)
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
TRACE( "QueryWL_Channel() Fail!!" );
return ZDNDIS_FAIL;
}
//if(RidStruct.u.data[0] > 14)
// return ZDNDIS_FAIL;
return (int)(RidStruct.u.data[0]);
}
INT CZDWlanAdapter::QueryWL_DesiredChannel(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_CHANNEL; // FC03
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
TRACE( "QueryWL_DesiredChannel() Fail!!" );
return ZDNDIS_FAIL;
}
//if(RidStruct.u.data[0] > 14)
// return ZDNDIS_FAIL;
return (int)(RidStruct.u.data[0]);
}
INT CZDWlanAdapter::SetWL_Channel(PWLADAPTERINFO pWLAdapterInfoIn, int nChannel)
{
if(nChannel < 1 || nChannel > 14)
return ZDNDIS_FAIL;
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_CHANNEL; // FC03
RidStruct.length = 2;
RidStruct.u.data[0]=(USHORT)nChannel;
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_SETRID, &RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL) {
TRACE( "QueryWL_Channel() Fail!!" );
return ZDNDIS_FAIL;
}
//SetWL_RestartNIC(pWLAdapterInfoIn);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_CurrentTxRate(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CURR_TX_RATE; // Current Tx Rate ==> FD44
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID,&RidStruct,sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return((int)(RidStruct.u.data[0]));
}
INT CZDWlanAdapter::QueryWL_TxRateControl(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_TX_RATE;
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID,&RidStruct,sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return((int)(RidStruct.u.data[0]));
}
INT CZDWlanAdapter::SetWL_TxRateControl(PWLADAPTERINFO pWLAdapterInfoIn, int nTxRateControl)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_TX_RATE;
RidStruct.length = 2;
RidStruct.u.data[0]=(USHORT)nTxRateControl;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
RidStruct.rid = RID_CFG_BASIC_RATES;
RidStruct.length = 2;
RidStruct.u.data[0]=(USHORT)nTxRateControl;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
//SetWL_RestartNIC(pWLAdapterInfoIn);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_WEPStatus(PWLADAPTERINFO pWLAdapterInfoIn)
{
int nTempInt;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_802_11_WEP_STATUS, &nTempInt, sizeof(nTempInt)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
if(nTempInt == Ndis802_11WEPEnabled) {
TRACE( "QueryWL_WEPStatus = Ndis802_11WEPEnabled\n" );
return 1;
} else if(nTempInt == Ndis802_11WEPDisabled) {
TRACE( "QueryWL_WEPStatus = Ndis802_11WEPDisabled\n" );
return 0;
} else {
TRACE( "QueryWL_WEPStatus = Unknown!!!\n" );
return ZDNDIS_FAIL;
}
}
INT CZDWlanAdapter::SetWL_WEPStatus(PWLADAPTERINFO pWLAdapterInfoIn, BOOL bWEPStatus)
{
int nTempInt;
if(bWEPStatus == 1) {
TRACE( "SetWL_WEPStatus = Ndis802_11WEPEnabled\n" );
nTempInt = Ndis802_11WEPEnabled;
} else if(bWEPStatus == 0) {
TRACE( "SetWL_WEPStatus = Ndis802_11WEPDisabled\n" );
nTempInt = Ndis802_11WEPDisabled;
}
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_802_11_WEP_STATUS, &nTempInt, sizeof(nTempInt)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_WEPHost(PWLADAPTERINFO pWLAdapterInfoIn, int nWepEnDe, BOOL bWEPHost)
{
RID_STRUCT RidStruct;
USHORT TempShort;
RidStruct.rid = RID_CFG_WEP_FLAGS; // Port Type ==> FC28
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
TempShort = RidStruct.u.data[0];
RidStruct.rid = RID_CFG_WEP_FLAGS; // Port Type (FC28)
RidStruct.length = 2;
if(bWEPHost) { // Enable WEP
if(nWepEnDe) { // Decryption setting.
RidStruct.u.data[0] = TempShort | 0x0010; // Enable Host Encryption
} else { // Encryption setting.
RidStruct.u.data[0] = TempShort | 0x0080; // Enable Host Decryption
}
} else { // Disable WEP
if(nWepEnDe) { // Decryption setting.
RidStruct.u.data[0] = TempShort & 0xFFEF; // Disable Host Encryption
} else {
RidStruct.u.data[0] = TempShort & 0xFF7F; // Disable Host Decryption
}
}
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
//SetWL_RestartNIC(pWLAdapterInfoIn);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_WEPbit(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_WEP_FLAGS; // Port Type ==> FC28
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
if(RidStruct.u.data[0] & 0x0100)
return 1; // WEP-128
else
return 0; // WEP-64
}
INT CZDWlanAdapter::SetWL_WEPbit(PWLADAPTERINFO pWLAdapterInfoIn, int nWEPbit)
{
RID_STRUCT RidStruct;
USHORT TempShort;
RidStruct.rid = RID_CFG_WEP_FLAGS; // Port Type ==> FC28
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
RidStruct.rid = RID_CFG_WEP_FLAGS; // Port Type ==> FC28
RidStruct.length = 2;
TempShort = RidStruct.u.data[0];
if(nWEPbit == 1) { // 128 bit WEP
RidStruct.u.data[0] = TempShort | 0x0100;
} else { // 64 bit WEP
RidStruct.u.data[0] = TempShort & 0xFEFF;
}
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
//SetWL_RestartNIC(pWLAdapterInfoIn);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_DefaultKeyID(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_DEFAULT_KEY_ID; // Port Type ==> FC23
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return (int)(RidStruct.u.data[0]);
}
INT CZDWlanAdapter::SetWL_DefaultKeyID(PWLADAPTERINFO pWLAdapterInfoIn, int nDefaultKeyID)
{
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_DEFAULT_KEY_ID, &nDefaultKeyID, sizeof(nDefaultKeyID)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_WriteKey(PWLADAPTERINFO pWLAdapterInfoIn, int nKeyID, int nWepBit, BOOL bDefaultKey, char *psKeyContent)
{
PNDIS_802_11_WEP pWepStruct;
int nWEPBinLength;
char szBuffer[100];
char szBuffer1[50];
if(nWepBit < 0 || nWepBit > 1) {
TRACE("The WEP key length incorrect!!! (0=64 1=128)\n");
return ZDNDIS_FAIL;
}
switch(nWepBit) {
case 0:
nWEPBinLength = 5;
break;
case 1:
nWEPBinLength = 13;
break;
case 2:
nWEPBinLength = 29;
break;
default:
return ZDNDIS_FAIL;
break;
}
pWepStruct = (PNDIS_802_11_WEP)malloc(sizeof(NDIS_802_11_WEP) + nWEPBinLength - 1);
if(!pWepStruct) {
TRACE("Not enough memory!!!\n");
return ZDNDIS_FAIL;
}
pWepStruct->Length = sizeof(NDIS_802_11_WEP) + nWEPBinLength - 1;
pWepStruct->KeyIndex = nKeyID;
if(bDefaultKey) {
pWepStruct->KeyIndex |= 0x80000000;
}
pWepStruct->KeyLength = nWEPBinLength;
memcpy(pWepStruct->KeyMaterial, psKeyContent, nWEPBinLength);
BinToHexStr(psKeyContent, szBuffer1, nWEPBinLength, 1);
sprintf(szBuffer, "Key ID: %d(Default: %d), WEP bit: %d, Key String: %s\n", nKeyID, bDefaultKey, ((nWepBit == 0) ? 64 : 128), szBuffer1);
TRACE (szBuffer);
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_802_11_ADD_WEP, pWepStruct, (sizeof(NDIS_802_11_WEP) + nWEPBinLength - 1)) == ZDNDIS_FAIL) {
free(pWepStruct);
return ZDNDIS_FAIL;
}
free(pWepStruct);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_PSMode(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PM_ENABLE; // 0xFC09
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return (int)RidStruct.u.data[0] & 0x01;
}
INT CZDWlanAdapter::SetWL_PSMode(PWLADAPTERINFO pWLAdapterInfoIn, BOOL bPSMode)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PM_ENABLE; // 0xFC09
RidStruct.length = 2;
if(bPSMode)
RidStruct.u.data[0] = 1;
else
RidStruct.u.data[0] = 0;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -