全球聚焦:Windows驱动开发技术具体解释(一)
在笔者接触驱动到如今以来一以后大半个月的时间,从中让我深深的体会到了万事开头难,以及学习持之以恒的重要性。笔者也是个驱动新人,開始接触驱动的时候看着张帆的《Windows驱动开发技术具体解释》讲的挺细,对新手来说是个不错的学习资料,可是更重要的还是自己要多动手练习,笔者在学习到同步操作的相关知识的时候,实在是看天书。最后还是放弃了学习本书。再找了本楚狂人的资料学习,感觉本书对新手来说还是比較吃力的,当中笔者就是这样,非常多知识点不是非常明确,仅仅能凭借自己的感觉去做,只是造成的后果就是无情的蓝屏^_^。终于要的是笔者坚持下来了。
今天来分享下学习过程中,编写键盘过滤的心得。关于工作原理由于笔者也是一知半解,就不在阐述。
我们的目的就是将自己的驱动设备挂接/driver/kbdclass驱动下的全部设备,如图所看到的:
(资料图片)
然后通过处理来达到过滤我们想要的按键信息。挂接后的驱动中的第一个设备就是我们的过滤设备,当有按键触发,按键信息首先会被我们自己写的设备所拦截,可是这时候拦截到的是没有处理的按键信息,那改怎么处理呢?我们去问键盘驱动,当我们拦截到按键IRP的时候先不做处理,给IRP设置完毕回调函数并传递给键盘驱动的设备。这样一来,当按键IRP被键盘驱动处理完毕之后就会运行我们的回调函数,这时我们在处理按键信息。当卸载我们的过滤设备的时候会有个麻烦就是会有个IRP已经设备了回调例程,而且在等待按键触发。假设这个IRP在没有处理之前就卸载掉我们的过滤驱动,就会引发按键蓝盘。为什么会蓝屏呢?由于这个IRP是已经被设置了回调函数,当IRP被处理完毕之后去找我们设置的回调函数,由于我们在IRP没有处理之前已经卸载了,所以这时IRP已经找不到回调函数了,所以导致蓝屏。大部分都的解决方式是在处理IRP的时候放置个计数器,当计数器不为0的时候说明还有IRP未完毕,这是卸载的时候就用while来一直等待这个IRP完毕,假设我们要是不按键盘的话,它会无休止的等待下去,而且也影响系统性能。 笔者通过相关资料的查阅,另个解决方式就是做个代理IRP,然后保存原来的IRP,由于我们能够取消自己的IRP。在卸载的时候先卸载我们的代理IRP,然后在发送原来保存的IRP,这样就非常好的攻克了无限的等待的BUG...可是笔者也没有找到相关代码,仅仅好自己动手试。经过一下午的測试,笔者发现我们仅仅须要做一个代理IRP就可以,并不须要保存原来的IRP,卸载的时候直接取消我们的IRP,并不须要又一次发送个IRP。以下我们来通过详细代码学习一下键盘过滤驱动。
首先:
//驱动入口 extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING pRegistryPath) { NTSTATUS status; DbgPrint("驱动载入開始.../n"); pDriverObject->DriverUnload=FilterUnload; //设置读取派遣函数 pDriverObject->MajorFunction[IRP_MJ_READ]=FilterDispatchRoutin; BindDevice(pDriverObject); DbgPrint("驱动载入结束.../n"); return STATUS_SUCCESS; }
在主函数中,调用BindDevice来实现过滤驱动的创建与绑定,代码例如以下:
//设备类型 extern "C" POBJECT_TYPE IoDriverObjectType; NTSTATUS BindDevice(PDRIVER_OBJECT pDriverObject) { NTSTATUS status; UNICODE_STRING uniNtNameString; //要打开的驱动对象 PDRIVER_OBJECT KbdDriverObject = NULL; //驱动对象的设备 PDEVICE_OBJECT kbdDeviceOjbect; //初始化一个字符串,就是kbdclass驱动的名子 RtlInitUnicodeString(&uniNtNameString,KBD_DRIVER_NAME); //依据名字打开驱动对象 status=ObReferenceObjectByName( &uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, IoDriverObjectType, KernelMode, NULL, (PVOID*)&KbdDriverObject); //假设失败了就直接返回 if(!NT_SUCCESS(status)) { DbgPrint("打开设备失败.../n"); return status; } //调用ObReferenceObjectByName会导致对驱动对象的引用计数添加 //必须响应的调用解引用ObDereferenceObject ObDereferenceObject(pDriverObject); DbgPrint("打开成功,解除引用.../n"); //键盘驱动的第一个设备 kbdDeviceOjbect=KbdDriverObject->DeviceObject; while(kbdDeviceOjbect!=NULL) { //创建并绑定过滤设备 CreateDevice(pDriverObject,kbdDeviceOjbect); //下一个设备 kbdDeviceOjbect=kbdDeviceOjbect->NextDevice; } return status; }
在这里说一下ObReferenceObjectByName函数,该方法没有被导出,知我我们在头文件里声明一下就可以使用,声明例如以下:
//依据名字获取设备对象,此函数没有公开,声明一下就能够直接使用了 extern "C" NTSTATUS ObReferenceObjectByName( PUNICODE_STRING objectName, ULONG Attributes, PACCESS_STATE AccessState, ACCESS_MASK DesiredAccess, POBJECT_TYPE objectType, KPROCESSOR_MODE accessMode, PVOID ParseContext, PVOID *Object);
在BindDevice方法中,调用了一个CreateDevice方法,该方法负责创建过滤设备,而且附加在目标设备上,详细代码例如以下:
//创建设备 NTSTATUS CreateDevice(IN PDRIVER_OBJECT pDriverObject,IN PDEVICE_OBJECT oldDevObj) { NTSTATUS status; PDEVICE_OBJECT pDevObj; //谁被扩展 PDEVICE_EXTENSION pDevExt; status=IoCreateDevice(pDriverObject, sizeof(PDEVICE_EXTENSION), NULL, oldDevObj->DeviceType,//设备类型须要和被附加的设备类型相等 0, FALSE,//假设指定设备是独占的,大部分驱动程序设置这个值为FALSE,假设不是独占的话设置为TRUE. &pDevObj); if(!NT_SUCCESS(status)) { DbgPrint("创建设备失败..../n"); return NULL; } pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension; //存储设备对象 pDevExt->pDevice=pDevObj; //绑定前原设备 pDevExt->poldDevice=oldDevObj; //标志位 pDevObj->Flags |=oldDevObj->Flags & (DO_BUFFERED_IO | DO_DIRECT_IO | DO_POWER_PAGABLE); //该标识指示I/O管理器对全部发送到控制设备对象的Open请求进行安全检測 pDevObj->Characteristics=oldDevObj->Characteristics; //绑定设备 PDEVICE_OBJECT topDev = IoAttachDeviceToDeviceStack(pDevObj,oldDevObj); if(topDev==NULL) { //假设绑定失败,销毁设备 IoDeleteDevice(pDevObj); status=STATUS_UNSUCCESSFUL; return status; } //将绑定的设备和原始设备放入设备扩展中 pDevExt->poldDevice=oldDevObj; pDevExt->pbindDevice=topDev; pDevObj->Flags=pDevObj->Flags & ~DO_DEVICE_INITIALIZING; KdPrint(("绑定成功../n")); return STATUS_SUCCESS; }
通过以上代码能够实现过滤设备的绑定,绑定了之后还是主要处理派遣函数,功能例如以下:
//派遣函数 NTSTATUS FilterDispatchRoutin(IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp) { PIO_STACK_LOCATION currentIrpStack; PDEVICE_EXTENSION pDevExt; //得到设备扩展 pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension; //得到当前irp包 currentIrpStack=IoGetCurrentIrpStackLocation(pIrp); //将当前irp拷贝到下层设备irp堆栈 IoCopyCurrentIrpStackLocationToNext(pIrp); //保存原来的irp //pDevExt->tagIrp=pIrp; //代理irp pDevExt->proxyIrp=pIrp; //设置当irp完毕时的回调例程 IoSetCompletionRoutine(pDevExt->proxyIrp,CallBackKbdFilter,pDevObj,TRUE,TRUE,TRUE); DbgPrint("irp回调例程设置完毕.../n"); return IoCallDriver(pDevExt->poldDevice,pDevExt->proxyIrp); }
注意的是在处理派遣函数的时候我们将IRP换成我们自己的IRP,这样就能达到取消IRP的目的,我们给IRP设置了回调函数,当IRP处理完毕的时候就去运行回调函数,回调函数例如以下:
// flags for keyboard status #define S_SHIFT 1 #define S_CAPS 2 #define S_NUM 4 static int kb_status = S_NUM; void __stdcall print_keystroke(UCHAR sch) { UCHAR ch = 0; int off = 0; if ((sch & 0x80) == 0) //make { if ((sch < 0x47) || ((sch >= 0x47 && sch < 0x54) && (kb_status & S_NUM))) // Num Lock { ch = asciiTbl[off+sch]; } switch (sch) { case 0x3A: kb_status ^= S_CAPS; break; case 0x2A: case 0x36: kb_status |= S_SHIFT; break; case 0x45: kb_status ^= S_NUM; } } else //break { if (sch == 0xAA || sch == 0xB6) kb_status &= ~S_SHIFT; } if (ch >= 0x20 && ch < 0x7F) { DbgPrint("%C /n",ch); } } NTSTATUS CallBackKbdFilter( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ) { PIO_STACK_LOCATION currentIrp; PKEYBOARD_INPUT_DATA keyData; currentIrp=IoGetCurrentIrpStackLocation(Irp); if(NT_SUCCESS(Irp->IoStatus.Status)) { keyData=(PKEYBOARD_INPUT_DATA)Irp->AssociatedIrp.SystemBuffer; //DbgPrint("扫描码:%x",keyData->MakeCode); DbgPrint("键盘 :%s",keyData->Flags?"弹起":"按下"); print_keystroke((UCHAR)keyData->MakeCode); } if( Irp->PendingReturned ) { IoMarkIrpPending( Irp ); } return Irp->IoStatus.Status; }
函数就不说明了,主要就是对makecode的处理,只是在回调函数中引用了对比表,例如以下:
unsigned char asciiTbl[]={ 0x00, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x2D, 0x3D, 0x08, 0x09, //normal 0x71, 0x77, 0x65, 0x72, 0x74, 0x79, 0x75, 0x69, 0x6F, 0x70, 0x5B, 0x5D, 0x0D, 0x00, 0x61, 0x73, 0x64, 0x66, 0x67, 0x68, 0x6A, 0x6B, 0x6C, 0x3B, 0x27, 0x60, 0x00, 0x5C, 0x7A, 0x78, 0x63, 0x76, 0x62, 0x6E, 0x6D, 0x2C, 0x2E, 0x2F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31, 0x32, 0x33, 0x30, 0x2E, 0x00, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x2D, 0x3D, 0x08, 0x09, //caps 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, 0x4F, 0x50, 0x5B, 0x5D, 0x0D, 0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4A, 0x4B, 0x4C, 0x3B, 0x27, 0x60, 0x00, 0x5C, 0x5A, 0x58, 0x43, 0x56, 0x42, 0x4E, 0x4D, 0x2C, 0x2E, 0x2F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31, 0x32, 0x33, 0x30, 0x2E, 0x00, 0x1B, 0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29, 0x5F, 0x2B, 0x08, 0x09, //shift 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, 0x4F, 0x50, 0x7B, 0x7D, 0x0D, 0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4A, 0x4B, 0x4C, 0x3A, 0x22, 0x7E, 0x00, 0x7C, 0x5A, 0x58, 0x43, 0x56, 0x42, 0x4E, 0x4D, 0x3C, 0x3E, 0x3F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31, 0x32, 0x33, 0x30, 0x2E, 0x00, 0x1B, 0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29, 0x5F, 0x2B, 0x08, 0x09, //caps + shift 0x71, 0x77, 0x65, 0x72, 0x74, 0x79, 0x75, 0x69, 0x6F, 0x70, 0x7B, 0x7D, 0x0D, 0x00, 0x61, 0x73, 0x64, 0x66, 0x67, 0x68, 0x6A, 0x6B, 0x6C, 0x3A, 0x22, 0x7E, 0x00, 0x7C, 0x7A, 0x78, 0x63, 0x76, 0x62, 0x6E, 0x6D, 0x3C, 0x3E, 0x3F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31, 0x32, 0x33, 0x30, 0x2E };
就是卸载函数,在卸载的时候我们要删除设备和附加的设备,然后取消最后一个IRP,代码例如以下:
//卸载例程 void FilterUnload(IN PDRIVER_OBJECT pDriverObject) { //得到设备 PDEVICE_OBJECT pDevObj=pDriverObject->DeviceObject; while(pDevObj!=NULL) { //设备扩展 PDEVICE_EXTENSION pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension; PDEVICE_OBJECT pTagObj=pDevExt->pbindDevice; //解除绑定 if(pDevExt->pbindDevice!=NULL) { IoDetachDevice(pDevExt->pbindDevice); } //删除设备 if(pDevExt->pDevice!=NULL) { IoDeleteDevice(pDevExt->pDevice); } if(pDevExt->proxyIrp!=NULL) { if(CancelIrp(pDevExt->proxyIrp)) { DbgPrint("取消成功。。。/n"); } else { DbgPrint("取消失败。。。/n"); } } //下一个设备 pDevObj=pDevObj->NextDevice; } }
载函数中调用了个取消IRP的方法,代码例如以下:
BOOLEAN CancelIrp(PIRP pIrp) { if(pIrp==NULL) { DbgPrint("取消irp错误.../n"); return FALSE; } if(pIrp->Cancel || pIrp->CancelRoutine==NULL) { DbgPrint("取消irp错误.../n"); return FALSE; } if(FALSE==IoCancelIrp(pIrp)) { DbgPrint("IoCancelIrp to irp错误.../n"); return FALSE; } //取消后重设此例为空 IoSetCancelRoutine(pIrp,NULL); return TRUE; }
整个键盘过滤驱动就完毕了,以后还得多多学习,多多总结。
转载请注明来自:http://blog.csdn.net/ms2146
转载于:https://www.cnblogs.com/mengfanrong/p/4344489.html
标签:
相关推荐:
精彩放送:
- []秦皇岛新世纪高中升学率多少?秦皇岛新世纪升学率高吗?
- []全球热门:杀人游戏:用循环数组解决约瑟夫环问题
- []【世界时快讯】忧郁的近义词是什么?忧郁的近义词的介绍
- []2023春季婚博会在京开幕,百合婚礼拉满浪漫氛围
- []从旧到新:航空系统转型,掌握“打开旅行的正确方式”
- []当前速看:本地连接受限怎么办?连接在哪里?
- []怪博士与机器娃娃第一部国语版 你知道多少?
- []今日热闻!“三胎”宝妈何洁素颜走机场 脸瘦的“变形” 可身材依旧圆滚滚
- []环球速讯:看图软件哪个好?看图工具那个好?
- []天天热点!中国电脑品牌排行榜:联想电脑销售量世界第一
- []什么是骗口张舌?骗口张舌什么意思?
- []支付宝小鸡庄园问答:哪种动物喜欢把海藻缠绕在身上枕浪而睡?
- []焦点速递!一叶障目告诉我们什么道理?一叶障目的含义
- []天天热点评!奇兔刷机怎么用?奇兔刷机使用教程
- []忘川风华录北斗七星盒子密码是多少?详情介绍
- []当前快播:hold是什么意思?hold住的简单介绍
- []昱怎么读?昱的拼音是什么?昱的含义
- []【独家】跑路了什么意思?跑路是什么人?
- []每日快播:《红色警戒3:起义时刻》游戏介绍 红色警戒3起义时刻配置要求
- []三星i408是多少钱?三星i408报价及详细测评介绍
- []蘑菇街是淘宝的吗?蘑菇街的详情介绍
- []京东企业邮箱怎么注册?京东企业邮箱注册申请步骤
- []一两银子等于多少人民币宋朝?一两银子等于多少铜钱?
- []全球看热讯:elo触摸屏显示器多少钱?elo触摸屏显示器品牌介绍
- []观天下!哪些华硕笔记本电脑的性价比最高?华硕笔记本大全
- []天天新动态:lol傲之追猎者操作设置 lol傲之追猎者出装推荐
- []egui.exe是什么进程?如何创建主键?
- []【世界时快讯】九龙仓置业盈转亏 2022年录得股东应占亏损88.56亿港元
- []新消息丨斗牛怎么玩?QQ斗牛作弊器怎么用?
- []Photoshop中overlay方式是什么?Photoshop中的overlay模式
- []阿里旺旺无法登陆怎么办?阿里旺旺无法登陆的解决措施
- []手机tf卡哪个牌子好?选购的注意事项有哪些?
- []【独家焦点】打印机什么牌子好用?打印机品牌推荐
- []全球新动态:百度网盘下载慢怎么办?百度网盘下载慢解决方法
- []天天快讯:厦门兴基伟业房地产开发破产清算 5月16日召开债权人会议
- []天天最资讯丨SWAP是什么?SWAP信令特点介绍
- []环球快看:数据寄存器是什么?它的作用有哪些?
- []全球快资讯:什么是指纹识别?指纹识别技术在笔记本电脑中的应用有哪些?
- []诺基亚X7-00如何插入存储卡?插入存储卡的方法
- []全球视讯!佳源国际票据经延长届满期限至5月6日 目前接获8.07亿美元交回指示
- []热点!一个月港元拆息升3.16点子至3.09744% 连升3日
- []焦点信息:海尔智家:海尔智能装备不是海尔智家旗下公司,多谢!
- []世界速看:股票换手率高说明什么
- []捷信利息这么高合法吗 捷信利息高合不合法
- []滚动:各大银行定期存款利率表2022,各大银行利率一览
- []各大银行定期存款利率是多少,银行存款利率一览
- []天天观察:交通银行房贷利率2022,分为以下三种利率
- []环球关注:湖南跃高置业7.23亿元摘得长沙县湘龙板块宅地 溢价率51%
- []平安不动产发行15亿元超短期融资券 利率4.85%
- []口子窖:公司股东股权质押主要系个人原因,对公司生产经营、公司治理等不会产生影响
- []环球热资讯!卓越商业管理已完成1亿美元债本息兑付 利率6.8%
- []中骏集团前两月累计合同销售金额68.6亿元 同比减少26%
- []全球热文:巨头大动作!美团突然收缩战线,发生了什么?股价疲软,有基金经理在撤退
- []通讯!花样年打造的首个“彩子家”空间于南京正式开业
- []100万车险一年多少钱,视情况而定
- []环球最新:手机银行如何转账,有以下七步
- []最新消息:余额宝利率 余额宝的利率是多少
- []各大银行贷款利率表2022年最新版,各行贷款利率一览
- []今日关注:驾驶证照片是几寸?证件照的制作及修改方法分享
- []天天新动态:补缺口是什么意思,意味着什么
- []键盘上三个灯分别是什么?Num Lock键的作用介绍
- []天天观点:WEG的完整形式是什么?WEG的完整形式介绍
- []今日热搜:KL散度、交叉熵、概率分布的差异是什么?时间序列中的概率分布
- []每日看点!NTC热敏电阻的采集方法有哪些?NTC热敏电阻温度采集方法介绍
- []焦点滚动:【东海期货3月7日产业链日报】贵金属篇:供应链压力指数下降,金银偏强震荡
- []什么是数据库索引?MySQL官方对索引的定义及索引优劣势分析
- []国信期货早评:美元略回落,金银维持震荡,油价持续反弹
- []新开源:2月底股东户数为16271户
- []Log4j2源码解析:同步写、异步写原理、中间技术思考
- []世界今头条!AI论文中的novelty如何评价?详情介绍
- []快资讯丨决策树算法是什么?决策树的定义与核心思想
- []【聚看点】全球最权威的学术期刊之一——《科学》
- []速读:程序、进程和线程——多线程的创建方法
- []深圳方直珑樾山177套住宅获批预售 均价约9.88万/㎡
- []每日观点:【WOTD】remittance 释义/词源/示例 词源词根演化
- []全球视点!什么是扁平化设计?扁平化时代之后会怎样?
- []struts的框架介绍 Struts2框架的大致处理流程
- []【全球快播报】大摩预期新地的股价在未来60日内会跑赢大市
- []丽水城投15亿元私募债券状态更新为“已反馈”
- []微信支付如何关闭“自动扣费”?关闭微信自动扣费的方法步骤
- []全球热点评!如何搭建VIE架构?VIE架构如何实现海外上市?
- []安琪酵母:人类饮食多样化,正常食用米面不会对人体内的胰岛素产生不利影响,合理膳食,管住嘴,迈开腿
- []看热讯:Kitten-少儿编程的首选工具 Kitten-少儿编程详情介绍
- []世界速讯:rolling(k)函数的用法详解 例子说明rolling函数的用法
- []世界速看:java的序列化机制是什么?java序列化ID的作用
- []环球快看点丨PMA的应用是什么?基于PMA-qPCR的生物学检测方法
- []今日热闻!常熟城市经营投资15亿元私募公司债项目更新至“已反馈”
- []与熊论道为什么解码不了?“熊”孩子都有哪些表现?
- []全球观天下!A股快报 | 地产板块早间开盘下跌 万业企业、中新集团、格力地产跌幅居前
- []新开源:年度审计仍在进行中,公司一月份已公告业绩预告
- []安宁股份:截至2023年2月28日股东人数20,818
- []gpi是什么意思
- []焦点日报:怎么才可以贷款,需要满足以下五个条件
- []玲娜贝儿首次与游客“贴贴”,上海迪士尼门票热度环比大增350%
- []白银股票的十大龙头股,概念龙头股名单一览
- []每日消息!华住、锦江与雅高的十年“恩怨”
- []银行卡账户名称是什么意思
- []蒲公英如何祛斑
- []环球新消息丨无锡哪里好玩?无锡旅游景点有哪些?
- []哪些甜红葡萄酒最好喝?分享四种最好喝的甜红葡萄酒
- 全球聚焦:Windows驱动开发技术具体解释(一)
- 百合婚礼携旗下品牌全阵营亮相2023年春季婚博会
- 当前头条:诺基亚5800xm、5530xm、5230有什么区别?详细对比与区别介绍
- 【环球时快讯】Ubuntu10.10下连接上无线网卡后无反应怎么办?无线上网设置方法
- 托收承付结算方式是什么?托收承付结算方式是什么意思?
- 世界即时:阿玛尼女士手表哪款好看?2021阿玛尼女士手表推荐榜单
- 天天观天下!张庭前脚刚夸完女儿漂亮 老公前妻后脚炫耀娃的颜值 差距很大
- 土豆是什么意思网络用语?土豆是什么意思?
- 君子一言快马一鞭下一句是什么?君子一言快马一鞭的含义
- 动态:蚂蚁庄园:虫牙真的是因为牙齿中有虫吗?
- 我的小米账号为什么登不上去了?小米账号登不上去的解决方式?
- 全球热资讯!徐州财经学校是个什么样的学校?徐州财经学校资料介绍?
- 勤哲Excel服务器无代码实现生物科技企业管理系统
- 白博美贵还是黄博美贵?为什么?
- 天天热资讯!国防科技大学和清华北大比怎么样?北京大学哪一年创办?
- 【全球独家】蜂巢能源携手龙净环保,合资储能电池项目龙岩开工
- 天天热文:氢能源股票龙头股,氢能源龙头股票盘点
- 当前头条:汽车排量是什么意思?中国轿车级别怎么划分?
- 环球短讯!大学生的就业竞争力主要包括哪些?大学生的就业竞争力介绍?
- 全球消息!g2030cpu是哪一年的?g2030cpu怎么样?
- 全球微头条丨洛阳龙门石窟夜景春节开放吗?“夜游龙门”活动时间?
- 美畅股份:38μ以下规格的金刚线是公司目前主要出货产品,产品价格相对稳定
- 资讯推荐:A股快报 | 物流板块早间开盘上涨 嘉友国际涨超8%
- 环球报道:港股房地产股走低 旭辉控股集团跌超4%
- 锦江集团2018年公司债即将到期兑付及摘牌 利率3.35%
- 最新:仁恒置地2月签约预售增长243.0%至人民币36.67亿元
- 全球简讯:湖北联发投集团10亿中期票据将到期兑付 票面利率5.9%
- 国中水务:公司主营业务的具体情况,您可以关注公司发布在上海证券交易所网站上的公司年报
- 当前观点:罗莱生活:公司已有抗H1N1病毒的自主知识产权技术,并同时储备了抗菌技术
- 世界简讯:* 拟赴港上市难掩业绩跳水困境,绝味食品逼近跌停
- 次级贷款的定义,贷款机构向信用较差的人发放的贷款
- 全球今亮点!“黑马”基金经理来了!
- 环球今亮点!银行储蓄利率2020年利率
- 微速讯:2021年创业板50股票一览表 2021创业板50支股票一览表
- 前沿热点:持仓是什么意思
- 怎样购买基金,有以下三种方法
- 每日看点!寻衅滋事罪怎么量刑
- 世界快看点丨财面儿丨越秀地产:前2月合同销售额约225.96亿元 同比上升约187.3%
- 快播:航天动力:公司未收到相关信息,公司按照相关法律法规履行信息披露义务,不存在应披露而未披露的信息
- 世界热点!科远智慧:公司自主研发并实现产业化推广的SyncBase实时数据库已经在数千家工业企业取得广泛应用
- 每日快播:沈晓玲等:房企如何应对现房销售试点?
- 家居丨美克家居:为控股股东美克集团提供6000万元担保
- 短讯!新规实施!外墙面层计入建筑面积,公摊变大了?
- 世界热点!同达创业:公司目前没有应披露未披露信息
- 最资讯丨家居丨梦百合:副总裁王震增持3.84万股公司股份 耗资45.12万元
- 【速看料】中国核建:中国核建是中核集团控股的专业化上市公司,是中核集团完整的核产业链中的重要一环
- 淘气值怎么增加 淘气值如何增加
- 全球热推荐:余额宝年利率 余额宝的年利率
- 环球快看点丨权益基金发行升温 3月份以来新发数量占比超60%
- 全球新消息丨光能杯储能主题演讲第五弹:面向投资商和工商业业主的分布式储能解决方案选择策略
- 车险排行榜 车险公司排行榜
- 当前动态:全国城市经济排名2021最新排名,上海排名第一
- 世界最新:中金:政策扶持+产业升级 智慧家居市场成长可期
- 每日简讯:中泰证券:银行股核心逻辑是宏观经济 坚持修复逻辑和确定性增长逻辑两条主线
- 世界今热点:尚太科技:行业的供需起伏波动是市场经济正常的表现形式,大浪淘沙,有利于有综合竞争优势的企业发展壮大
- 世界快看:又有A股知名公司"出事"!副总裁兼财务总监涉嫌职务犯罪,影响多大?
- 南昌中溢置业挂牌杭州通原地产40%股权 底价8454万元
- 普天科技:公司在开展5G相关业务的同时,也在积极探索和跟进6G的行业发展趋势
- 华侨城拟发行20亿元超短期融资券 申购区间2.5%-2.8%
- 国家队出场次数即将破百,优缺点明显的张琳芃,算亚洲一流后卫么
- 天天微速讯:折纸王子蝎子怎么折_折纸王子教你折毒蝎子
- 【新视野】疫情过后,酒店餐饮用工如何破局?
- 每日热议!携程集团扭亏为盈 2022年全年录得净利润14亿元
- 视焦点讯!改善居住:不必买,租也行!
- 沈晓玲等:多地鼓励现房销售试点,房企如何调整应对?
- 焦点信息:全国政协委员戴斌:旅游需要网红,但网红不是旅游的全部
- 真兰仪表:公司生产的气体流量计是一种精密计量器具,主要用于天然气的贸易计量与结算,其准确度达1.0级
- 【世界聚看点】12306网站无法退票_12306网站无法登陆
- 天天快报!教育部发通知,要及时淘汰不适应社会需要的学科专业,各位觉得哪些专业应被淘汰?
- 歧路亡羊的故事概括20字_歧路亡羊的故事概括
- 全球头条:绿城中国(03900.HK)前4个月总合同销售金额约637亿元
- 全球速看:仁东控股面临多重压力 投资者索赔案仍在进行中
- 天天快看:股东会见闻录 | 招商蛇口“南油收购”决心
- 建业地产首两月合同销售总额49.9亿元?同比增长57.7%
- 每日快看:古鳌科技:3月3日公司高管陈崇军减持公司股份合计2万股
- 全球快消息!中熔电气:3月3日公司高管贾钧凯减持公司股份合计2800股
- 【世界新要闻】鼎龙股份:3月3日公司高管杨波减持公司股份合计9万股
- 天天动态:龙佰集团:3月3日公司高管张海涛增持公司股份合计100股
- 世界实时:刘小蕙
- 今头条!企业家看两会: 科技、互联网企业家代表委员关注哪些议题?
- 溢多利:公司目前没有工业大麻产品
- 世界关注:“建议上调1万+,请不要再贱卖自己的房子!”多地二手房业主抱团“保卫房价”
- 每日看点!月度新车榜 | 智己、理想等SUV密集推出 小车市场再添新玩家
- 沃尔德:3月3日公司高管陈继锋减持公司股份合计3.18万股
- 全球新资讯:2023年03月06日上市公司公告
- 【全球新视野】杭可科技子公司中标远景动力在英国和法国扩产所采购的锂电池后道设备项目 中标价1.17亿美元(不含税)
- 天天热点评!荣盛发展定增方案获深交所受理?募资金额不超30亿
- 环球看点!雅居乐前2月预售额约125.6亿元 同比减少10.92%
- 报道:达安基因:公司主营产品为PCR诊断试剂及相关耗材、仪器等
- 头条焦点:福星股份定增申请获得深交所受理 募资不超过13.4亿元
- 环球简讯:新瀚新材:新产能产品验证及爬坡需要一定的过程,公司会根据市场需求统筹安排产能
- 梦百合:3月6日公司高管王震增持公司股份合计3.84万股
- 修培刻灵“蕉仙素”是非药物疗法与现代生物科技的结晶
- 国美控股所持1639万股中关村股份被司法再冻结?累计冻结占比64.62%
- 绿景中国回购2750万美元2023年到期年息12%票据
- 粗暴的流量时代已经终结,酒店营销难题如何找到最优解?
- 天天快报!财面儿丨中国海外宏洋集团1-2月累计合约销售额78.48亿元 同比上升34%
- * 贝斯曼拟赴美IPO,2022财年净亏损扩大74%至232万美元
- 环球快资讯丨深圳能源:公司按国家政策要求,积极签署并落实煤炭中长期合同,中长期合同覆盖率处行业中上水平
- 天天要闻:财面儿丨金地集团:前2月签约金额240.1亿元
- 今日要闻!德信中国1-2月合约销售额55.4亿?同比增长4.33%
- 财面儿丨保利置业集团:前2月合同销售金额131亿元,同比增长243%
- 观焦点:凯撒文化:公司与沉浸世界除了线下空间合作之外,在VR游戏研发内容方面双方也有探讨
- 环球今热点:快讯 | 科凡定制深主板IPO获受理
- 即时:曹仁贤代表:关于鼓励民营企业参与大型新能源项目开发的建议
- 铅炭电池是新型储能技术,商业化推广前景可期
- CCER炒到106元/吨,会拉动全国碳市场价格上涨吗?
- 动态:2023快速成长,这7个城市的小型论坛必去!
- 电站项目全面转N型|晶科N-TOPCon技术产品成“宠儿” 大幅提升大基地项目高质量发展
- 世界热门:逆天业绩,极其低调却凶猛,被低估的光伏隐形巨头