一直有人说用VC编程很容易涉及到底层的东西,那究竟怎样才算涉及底层呢? 编程时有时直接调用API函数算底层吗?设置钩子算底层吗?子类化算底层吗?编写dll算底层吗?有哪个高手能向我说明一下用VC怎么才算牵扯到了底层的东西?我上面举的例子里有牵扯到底层的吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 底层就是和操作系统相关的东西钩子也算,还有底层的函数,比如Native API,驱动所用的函数,过滤驱动等 比如Windows CE系统下编写完某个驱动程序(流接口,分层驱动等)完成了其控制底层的接口函数就可以编写一小段VC代码来测试一下驱动是否加载成功可以调用DeviceIoControl与驱动交互可以调用驱动的接口函数来操作硬件测试是否成功另外可以通过VC写的一段代码直接读写或者擦除硬盘,SD卡,U盘的物理扇区等等我觉得在嵌入式系统方面工作的人更容易涉及到底层的东西因为嵌入式系统一般要软硬兼施不知道我说的是不是楼主所说的底层朱铭雷 感觉大家讲的还是有些含糊,也许是我的理解力比较差吧.如果能贴段涉及底层操作的代码的话,可能我比较好理解。int* p=(int *)malloc(sizeof(int));算直接操作内存吗?算底层操作代码吗? filename = _T("\\.\DSK1:"); HANDLE hFile = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(_T("打开U盘失败!")); CloseHandle(hFile); return; } else { MessageBox(_T("打开U盘成功!")); m_edit = (long)hFile; UpdateData(false); } BYTE buffer[512]; for(int i=0;i < 512;i++) { buffer[i] = 0xA5; } SG_REQ SG_req1; SG_req1.sr_start = 0; SG_req1.sr_num_sec = 1; SG_req1.sr_num_sg = 1; SG_req1.sr_status = 0; SG_req1.sr_callback = NULL; SG_req1.sr_sglist[0].sb_len = 512; SG_req1.sr_sglist[0].sb_buf = buffer; DWORD actnum; if(!DeviceIoControl(hFile,IOCTL_DISK_WRITE,&SG_req1, sizeof(SG_req1),0,0,&actnum,0)) { MessageBox(_T("写U盘失败!")); } else { MessageBox(_T("写U盘成功!")); 这段代码,我直接写U盘的物理扇区0写完之后那WinHex看,0扇区已经全部为0了这样再插到系统之后,主引导破坏,就不识别了这是一个特别的应用中写的一段代码运行环境是Windows CE 5.0不知道算不算楼主说的底层。朱铭雷 MessageBoxEx用法 网络疑难问题求教贴! 有关虚拟继承的困惑 自己写的程序被杀毒软件误杀怎么办? 请问哪里有视屏聊天的VC代码下载? 请问把BMP的24位图转换成灰度图的程序 我程序里的预览窗口上的字体是英文。怎么改成中文? 求助!关于MapObjects的菜鸟问题!!!!!!!!!!!! (100分)怎么在一个多文档程序文件菜单中加入“最近打开的文件”这一菜单? 如何直接将图标或位图文件直接添加到CImageList中?不使用资源! 菜鸟问题,急等解决!! 深入浅出mfc的一个问题
钩子也算,还有底层的函数,比如Native API,驱动所用的函数,过滤驱动等
编写完某个驱动程序(流接口,分层驱动等)
完成了其控制底层的接口函数
就可以编写一小段VC代码
来测试一下驱动是否加载成功
可以调用DeviceIoControl与驱动交互
可以调用驱动的接口函数来操作硬件
测试是否成功
另外可以通过VC写的一段代码
直接读写或者擦除硬盘,SD卡,U盘的物理扇区等等
我觉得在嵌入式系统方面工作的人
更容易涉及到底层的东西
因为嵌入式系统一般要软硬兼施
不知道我说的是不是楼主所说的底层朱铭雷
如果能贴段涉及底层操作的代码的话,可能我比较好理解。int* p=(int *)malloc(sizeof(int));
算直接操作内存吗?算底层操作代码吗?
HANDLE hFile = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(_T("打开U盘失败!"));
CloseHandle(hFile);
return;
}
else
{
MessageBox(_T("打开U盘成功!"));
m_edit = (long)hFile;
UpdateData(false);
}
BYTE buffer[512];
for(int i=0;i < 512;i++)
{
buffer[i] = 0xA5;
}
SG_REQ SG_req1;
SG_req1.sr_start = 0;
SG_req1.sr_num_sec = 1;
SG_req1.sr_num_sg = 1;
SG_req1.sr_status = 0;
SG_req1.sr_callback = NULL;
SG_req1.sr_sglist[0].sb_len = 512;
SG_req1.sr_sglist[0].sb_buf = buffer;
DWORD actnum;
if(!DeviceIoControl(hFile,IOCTL_DISK_WRITE,&SG_req1,
sizeof(SG_req1),0,0,&actnum,0))
{
MessageBox(_T("写U盘失败!"));
}
else
{
MessageBox(_T("写U盘成功!")); 这段代码,我直接写U盘的物理扇区0
写完之后那WinHex看,0扇区已经全部为0了
这样再插到系统之后,主引导破坏,就不识别了
这是一个特别的应用中写的一段代码
运行环境是Windows CE 5.0
不知道算不算楼主说的底层。朱铭雷