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

📄 ptuserio.cpp

📁 这是一个基于NDIS开发的中间层驱动应用程序
💻 CPP
字号:
 //////////////////////////////////////////////////////////
// PTUSERIO.CPP文件


#include <windows.h>
#include <stdio.h>
#include <ntddndis.h>
#include "IOCOMMON.h"
#include "ptutils.h"

void DisplayAdapterInfo(HANDLE hAdapter)
{
	char buffer[1024 + sizeof(PTUSERIO_OID_DATA) - 1] = {'\0'};
	PPTUSERIO_OID_DATA pOid = (PPTUSERIO_OID_DATA)buffer;
	pOid->Length = 1024;


	// 查询制造商的描述信息
	pOid->Oid = OID_GEN_VENDOR_DESCRIPTION;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter, pOid, TRUE))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}
	wprintf(L"	Description: %S \n", pOid->Data);



	// 查询正在使用的媒介
	NDIS_MEDIUM NdisMedium;
	pOid->Oid = OID_GEN_MEDIA_IN_USE  ;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter, pOid, TRUE))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}
	NdisMedium = *((PNDIS_MEDIUM )pOid->Data);

	switch(NdisMedium)
	{
	case NdisMedium802_3:
		printf("	Medium: NdisMedium802_3 \n");
		break;
	case NdisMediumWan:
		printf("	Medium: NdisMediumWan \n");
		break;
	default:
		printf("	unkown type \n");
		break;
	}



	// 查询连接状态
	int nConnectedState;
	pOid->Oid = OID_GEN_MEDIA_CONNECT_STATUS;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter, pOid, TRUE))
	{
		printf("	Media Connect Status: UNKNOWN \n ");
	}
	else
	{
		nConnectedState = *((int*)pOid->Data);
		printf( "	Media Connect Status: %s\n",
         nConnectedState == NdisMediaStateConnected ? "Connected" : "Disconnected");
	}


	
	//查询网卡的连接速度
	int nLinkSpeed;
	pOid->Oid = OID_GEN_LINK_SPEED ;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter,pOid,true))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}
	nLinkSpeed=*((int*)pOid->Data)*100;
	printf("        LinkSpeed :%d bps\n",nLinkSpeed);	



    //查询网络类型
	NDIS_802_11_NETWORK_TYPE NdisNetType;
	pOid->Oid = OID_802_11_NETWORK_TYPES_SUPPORTED;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter,pOid,true))
	{
		printf(" PtAdapterRequest() failed \n ");
        return;
	}
	NdisNetType = *((PNDIS_802_11_NETWORK_TYPE)pOid->Data);
	
	switch(NdisNetType)
	{
	case Ndis802_11FH:
		printf("	 NETWORKTYPE: Ndis802_11FH \n");
		break;
	case Ndis802_11DS:
		printf("	 NETWORKTYPE: Ndis802_11DS \n");
		break;
	case 2:
		printf("	NETWORKTYPE: Ndis802_11OFDM5 \n");
		break;
	case 3:
		printf("     NETWORKTYPE: Ndis802_11OFDM24");
		break;
	default:
		printf("	unkown type \n");
		break;
	}



    //查询网络模式
	NDIS_802_11_NETWORK_INFRASTRUCTURE ModeType;
	pOid->Oid = OID_802_11_INFRASTRUCTURE_MODE ;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter, pOid, TRUE))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}
	ModeType = *((PNDIS_802_11_NETWORK_INFRASTRUCTURE)pOid->Data);

	switch(ModeType)
	{
	case Ndis802_11IBSS:
		printf("	Mode: Ad-hoc \n");
		break;
	case Ndis802_11Infrastructure:
		printf("	Mode: Infrastructure \n");
		break;
	default:
		printf("	Ndis802_11AutoUnknown \n");
		break;
	}
	


	//查询网络SSID
	NDIS_802_11_SSID SSID;
	pOid->Oid = OID_802_11_SSID;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter, pOid, TRUE))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}
	SSID = *((PNDIS_802_11_SSID)pOid->Data);
	printf("        SSID: ");
	for(int i=0;i<32;i++)
	{
		if(SSID.Ssid[i]!='\0')
			printf("%c",SSID.Ssid[i]);
		else 
		{
			printf("\n");
			break;
		}
	}
	

/*   //检查WEP状态   
	NDIS_802_11_WEP_STATUS  WEP;
	pOid->Oid = OID_802_11_WEP_STATUS;
	pOid->Length = 1024;
    if(!PtAdapterRequest(hAdapter,pOid,TRUE))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}
	WEP = *((PNDIS_802_11_WEP_STATUS)pOid->Data);
	printf("        WEP STATUS : %d",WEP);
    switch(WEP) {
    case 0 :
	    printf("        WEP STATUS : Enable \n");
    	break;
    case 2 :
        printf("        WEP STATUS : Disable \n");
    	break;
    default:
		printf("        WEP STATUS : UNKNOWN \n");
    }



	//网卡能量模式
	NDIS_802_11_POWER_MODE  PowerModel;
	pOid->Oid = OID_802_11_POWER_MODE;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter,pOid,true))
	{
		printf(" PtAdapterRequest() failed \n");
		return;
	}
	PowerModel=*((PNDIS_802_11_POWER_MODE)pOid->Data);
	switch(PowerModel) {
	case Ndis802_11PowerModeCAM:
		printf("        PoweModel : Ndis802_11PowerModeCAM");
		break;
	case Ndis802_11PowerModeMAX_PSP:
		printf("        PowerModel :Ndis802_11PowerModeMAX_PSP");
		break;
	case Ndis802_11PowerModeFast_PSP:
		printf("        PowerModel :Ndis802_11PowerModeFast_PSP");
	default:
		printf("        Unknown Type!");
	}
    printf("\n");

	//Auth
	NDIS_802_11_AUTHENTICATION_MODE authtype;
	pOid->Oid = OID_802_11_AUTHENTICATION_MODE;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter,pOid,true))
	{
		printf("PtAdapterRequest() failed \n");
		return;
	}
	authtype=*((PNDIS_802_11_AUTHENTICATION_MODE)pOid->Data);
	printf("%d\n",authtype);
*/

}


//*******************************************************************************
	void SetAdapterInfo(HANDLE hAdapter)
{
	char buffer[1024 + sizeof(PTUSERIO_OID_DATA) - 1] = {'\0'};
	PPTUSERIO_OID_DATA pOid = (PPTUSERIO_OID_DATA)buffer;
	pOid->Length = 1024;

	
	printf("\n**********************************\n");
	
	/*//断开连接
	pOid->Oid = OID_802_11_DISASSOCIATE;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter,pOid,false))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}*/

    
	pOid->Oid = OID_802_11_BSSID_LIST_SCAN;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter,pOid,false))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}  

	Sleep(6000);
	//读取设置后的网卡信息

    {
    char *buffer;
	buffer = (char *)malloc(sizeof(PTUSERIO_OID_DATA)+1024);
	memset(buffer,0,1024);
	PTUSERIO_OID_DATA *pOid;
	pOid = (PTUSERIO_OID_DATA *)buffer;
	PNDIS_802_11_BSSID_LIST Infolist;
	pOid->Oid = OID_802_11_BSSID_LIST ;
	pOid->Length = 1024;
	if(!PtAdapterRequest(hAdapter,pOid,true))
	{
		printf(" PtAdapterRequest() failed \n ");
		return;
	}
	Infolist = ((PNDIS_802_11_BSSID_LIST)pOid->Data);
	printf("\n %d\n",Infolist->NumberOfItems);
	NDIS_802_11_SSID sSSID;
	NDIS_802_11_NETWORK_INFRASTRUCTURE aptype;
	int flag = 20;
	int k = 0;
	printf("          SSID:\n");
	do 
	{
		int num = flag;
		for(int i = 0;i<pOid->Data[flag-4];i++)
		{
		   printf("%c",pOid->Data[num]);
           num++;
		}
		aptype=(NDIS_802_11_NETWORK_INFRASTRUCTURE)pOid->Data[flag+76];
		switch(aptype)
		   {
	           case Ndis802_11IBSS:
		           printf("	Mode: Ad-hoc \n");
		       break;
	           case Ndis802_11Infrastructure:
		           printf("	Mode: Infrastructure \n");
		       break;
	           default:
		           printf("	Ndis802_11AutoUnknown \n");
		       break;
		   }
		printf("\n");
		flag+=pOid->Data[flag-16];
		k++;
	} while(k<Infolist->NumberOfItems);

	}

    {
		char array[32];
		printf("Input a string:");
		scanf("%s",array);
		int len;
		len = strlen(array);
		char *data = array;
		char *buffer;
		PTUSERIO_OID_DATA *pOid;
		buffer=(char *)malloc(sizeof(PTUSERIO_OID_DATA)+len);
		memset(buffer,0,sizeof(PTUSERIO_OID_DATA)+len);
		if(buffer==NULL) return ;
        pOid = (PTUSERIO_OID_DATA *)buffer;
		pOid->Oid = OID_802_11_SSID;
		pOid->Length = len;
		if(data) memcpy(pOid->Data,data,len);
		if(!PtAdapterRequest(hAdapter,pOid,false))
		{
			free(buffer);
			printf(" PtAdapterRequest() failed \n ");
			return;
		}
		free(buffer);
		return;

    }



/*//设置网卡的Auth
	{pOid->Oid = OID_802_11_AUTHENTICATION_MODE;
	pOid->Length = 1024;
	NDIS_802_11_AUTHENTICATION_MODE nType = Ndis802_11AuthModeOpen;
	*(PNDIS_802_11_AUTHENTICATION_MODE)pOid->Data = nType;
	if(!PtAdapterRequest(hAdapter,pOid,false))
	{
		printf(" PtAdapterSet() failed \n");
		int i=::GetLastError();
		printf("%d\n",i);
		return;
	}} 

	//设置网卡模式
	{pOid->Oid = OID_802_11_INFRASTRUCTURE_MODE;
	pOid->Length = 1024;
	NDIS_802_11_NETWORK_INFRASTRUCTURE nType = Ndis802_11IBSS;
	*(PNDIS_802_11_NETWORK_INFRASTRUCTURE)pOid->Data = nType;
	if(!PtAdapterRequest(hAdapter,pOid,false))
	{
		printf(" PtAdapterSet() failed \n");
		int i=::GetLastError();
		printf("%d\n",i);
		return;
	}}


    //设置网卡的SSID
    {pOid->Oid = OID_802_11_SSID;
	pOid->Length = 1024;
	NDIS_802_11_SSID SSID ;
	SSID.SsidLength = 5;
	SSID.Ssid[0]='l';
	SSID.Ssid[1]='i';
	SSID.Ssid[2]='u';
	SSID.Ssid[0]='b';
	SSID.Ssid[1]='o';
	*(PNDIS_802_11_SSID)pOid->Data = SSID;
	if(!PtAdapterRequest(hAdapter,pOid,false))
	{
		printf(" PtAdapterSet() failed \n");
		return;
	}}	*/
	
}

int main()
{
	HANDLE hControlDevice = PtOpenControlDevice();
	CIMAdapters adapters;
	if(!adapters.EnumAdapters(hControlDevice))
	{
		printf(" EnumAdapters failed \n");
		return -1;
	}

	//printf(" Driver Bindings: \n");
	//for(int i=0; i<adapters.m_nAdapters; i++)
	int i=0;
	{
		// 显示虚拟适配器名称
		//printf("    \"%ws\" \n", adapters.m_pwszVirtualName[i]);
		// 显示下层适配器名称
		//printf("       \"%ws\" \n", adapters.m_pwszAdapterName[i]);
	

		HANDLE hLowerAdapter = PtOpenAdapter(adapters.m_pwszAdapterName[i]);
		if(hLowerAdapter != INVALID_HANDLE_VALUE)
		{
			DisplayAdapterInfo(hLowerAdapter);
			SetAdapterInfo(hLowerAdapter);
			::CloseHandle(hLowerAdapter);
		}	
		
		printf(" \n");
	}
	::CloseHandle(hControlDevice);
	return 0;
}



/*
int main()
{
	HANDLE hControlDevice = PtOpenControlDevice();
	CIMAdapters adapters;
	if(!adapters.EnumAdapters(hControlDevice))
	{
		printf(" EnumAdapters failed \n");
		return -1;
	}

	printf(" Driver Bindings: \n");
	for(int i=0; i<adapters.m_nAdapters; i++)
	{
		// 显示虚拟适配器名称
		printf("    \042%ws\042\n", adapters.m_pwszVirtualName[i]);
		// 显示下层适配器名称
		printf("       \042%ws\042\n", adapters.m_pwszAdapterName[i]);
		printf(" \n");
	}
	::CloseHandle(hControlDevice);
	return 0;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -