⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdwlanadapter.cpp

📁 这个是无线网卡WirelessLAN 测试程序NDIS
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -