如何利用deviceiocontrol函数实现对光盘数据的读取,麻烦各位看看

源代码如下
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include"new.h"
using namespace std;
BOOL GetDriveString(TCHAR *j)
{
TCHAR cBuff[MAX_PATH]={0};
DWORD slen=GetLogicalDriveStrings(MAX_PATH,cBuff);
TCHAR *pc=cBuff;
int i=0;
int iLength=0;
while('\0'!=*pc)
{
j[i]=*pc;
iLength=_tcslen(pc);
pc+=iLength+1;
i++;
}
if(_tcslen(j)!=0)
return 1;
else
return 0;
}

BOOL GetDriveTypeStr(const TCHAR *strDrive,TCHAR *strType)
{
char RPathName[]="C:\";
RPathName[0]=*strDrive;
UINT uDrivetype=GetDriveType(RPathName);
switch(uDrivetype)
{
case DRIVE_UNKNOWN:
sprintf(strType, _T("%s: %s"), strDrive, _T("UnKnow"));
//_tcscpy(strType, _T("UnKnow"));
break;
case DRIVE_NO_ROOT_DIR:
sprintf(strType, _T("%s: %s"), strDrive, _T("DRIVE_NO_ROOT_DIR"));
break;
case DRIVE_REMOVABLE:
sprintf(strType, _T("%s: %s"), strDrive, _T("DRIVE_REMOVABLE"));
break;
case DRIVE_FIXED:
sprintf(strType, _T("%s: %s"), strDrive, _T("DRIVE_FIXED"));
break;
case DRIVE_REMOTE:
_stprintf(strType, _T("%s: %s"), strDrive, _T("DRIVE_REMOTE"));
break;
case DRIVE_CDROM:
sprintf(strType, _T("%s: %s"), strDrive, _T("DRIVE_CDROM"));
break;
case DRIVE_RAMDISK:
sprintf(strType, _T("%s: %s"), strDrive, _T("DRIVE_RAMDISK"));
break;
default:
sprintf(strType, _T("%s: %s"), strDrive, _T("Else"));
break;
}
return 1;
}

BOOL GetDriveHandle(const TCHAR *strDrive,HANDLE *hDevice)
{
TCHAR RPathName[]="\\.\C:";
RPathName[4]=*strDrive;

*hDevice = CreateFile((LPCSTR)RPathName,          // drive to open
    GENERIC_READ | GENERIC_WRITE,                // no access to the drive
    FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
    NULL,             // default security attributes
    OPEN_EXISTING,    // disposition
    0,                // file attributes
    NULL);            // do not copy file attributes

if (hDevice == INVALID_HANDLE_VALUE)    // cannot open the drive
{
    return (FALSE);
}
return TRUE;

}

BOOL GetDriveGeometry(HANDLE hDevice, const TCHAR *strDrive, char *Dgeometry)
{
BOOL bResult = FALSE; // results flag
DWORD junk = 0; // discard results
DISK_GEOMETRY pdg={0}; // disk drive geometry structure
ULONGLONG DiskSize = 0; // size of the drive, in bytes
bResult =DeviceIoControl(hDevice, // device to be queried
IOCTL_DISK_GET_DRIVE_GEOMETRY, // operation to perform
NULL, 0, // no input buffer
&pdg, sizeof(pdg), // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O
if (bResult)
{
sprintf(Dgeometry, "Drive path = %s;\n", strDrive);

        DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder * (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
        sprintf(Dgeometry, "%sDisk size  = %I64d (Bytes);\n"
        "           = %.2f (Gb).\n", 
                            Dgeometry,DiskSize, (double) DiskSize / (1024 * 1024 * 1024));  
        return 1;
    } 
    else 
    {
        sprintf (Dgeometry, "GetDriveGeometry failed.");
        return 0;
    }

}

BOOL ScsiPassthrough(HANDLE hDevice,BYTE *ucAddress,int wBlock)
{

SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptdwb;
ULONG length = 0;
DWORD bytesReturn;
BYTE bufDataRead[64 * 1024 + 10];
//数组清零
memset(bufDataRead,0,sizeof(bufDataRead));
int iRet;

//扇区数
int sectors=bufDataRead[0]*(1<<24)+bufDataRead[1]*(1<<16)+bufDataRead[2]*(1<<8)+bufDataRead[3]+1;
//每个扇区的字节数
int bytesPerSector=bufDataRead[4]*(1<<24)+bufDataRead[5]*(1<<16)+bufDataRead[6]*(1<<8)+bufDataRead[7];
printf("sectors=%d bytesPerSector=%d\n",sectors,bytesPerSector);

ZeroMemory(&sptdwb, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER));
sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
sptdwb.sptd.PathId = 0;
sptdwb.sptd.TargetId = 1;
sptdwb.sptd.Lun = 0;
sptdwb.sptd.CdbLength = 12; //SCSI命令长度
sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_IN;
sptdwb.sptd.SenseInfoLength = 24;
sptdwb.sptd.DataTransferLength =bytesPerSector*wBlock; //读数据量
sptdwb.sptd.TimeOutValue = 2;
sptdwb.sptd.DataBuffer =bufDataRead;
sptdwb.sptd.SenseInfoOffset =offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, ucSenseBuf);

sptdwb.sptd.Cdb[0] = 0x28;          //读READ(10)数据命令
sptdwb.sptd.Cdb[1] = 0x00;
sptdwb.sptd.Cdb[2] = (*ucAddress>>24)&0xff; 
sptdwb.sptd.Cdb[3] = (*ucAddress>>16)&0xff;
sptdwb.sptd.Cdb[4] = (*ucAddress>>8)&0xff;
sptdwb.sptd.Cdb[5] = *ucAddress&0xff;
sptdwb.sptd.Cdb[6] = 0x00;
sptdwb.sptd.Cdb[7] = (wBlock>>8)&0xff;
sptdwb.sptd.Cdb[8] = wBlock&0xff;   //读readSectors个扇区 ,注意这个值一定要与DataTransferLength相对应
sptdwb.sptd.Cdb[9] = 0x00;
sptdwb.sptd.Cdb[10] = 0x00;
sptdwb.sptd.Cdb[11] = 0x00;
length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
//向设备发送
iRet = DeviceIoControl(hDevice,
    IOCTL_SCSI_PASS_THROUGH_DIRECT,
    NULL,
    0,
    bufDataRead,
    wBlock,
    &bytesReturn,
    NULL);
if (0 == iRet)
{
    printf("读取光盘数据失败");
    return 0;
}
//放置到公用数组
memcpy(&ucAddress[0],&bufDataRead[0],wBlock);
return true;

}
/*for(int i=0;i<iSize*bytesPerSector;i++)
{

if(i%16==0)
{

printf("\n");
}
printf("%02X",bufDataRead[i]);
}
printf("\n");
return 0;
}*/

BOOL SetCDSpeed(HANDLE hDevice, int speed)
{
DWORD dwOutBytes;
CDROM_SET_SPEED SetSpeed;
SetSpeed.RequestType =(CDROM_SPEED_REQUEST)0;
SetSpeed.ReadSpeed =speed;
if (DeviceIoControl(hDevice,
IOCTL_CDROM_SET_SPEED,
&SetSpeed, sizeof(SetSpeed),
0, NULL,
&dwOutBytes,
(LPOVERLAPPED)NULL))
return true;

return false;
}

BOOL CloseDriveHandle(HANDLE hDevice)
{
return (CloseHandle(hDevice));
}

void main()
{
TCHAR j[MAX_PATH]={0};
TCHAR strType[100] = {0};
TCHAR Dgeometry[1000] = {0};
int speed =100;
HANDLE hDevice;
BYTE bufDataRead[64 * 1024 + 10];
int ucAddress=65;
int wBlock=2;

GetDriveString(j);
j[0] ='H';
GetDriveTypeStr(j,strType);
GetDriveHandle(j,&hDevice);
GetDriveGeometry(hDevice, j, Dgeometry);
if(ScsiPassthrough(hDevice,ucAddress,wBlock))
    printf("%d,%d",ucAddress,wBlock);
CloseDriveHandle(hDevice);
while(1);

}

2个回答

m0_38003653
RSB140508 谢谢
2 年多之前 回复

自己顶一下,本人是小白,还没有c币,麻烦有懂的人帮忙看看,谢谢

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
IOCTL_STORAGE_QUERY_PROPERTY
使用DeviceIoControl函数, 控制码为IOCTL_STORAGE_QUERY_PROPERTY ,获取的结构为STORAGE_DEVICE_DESCRIPTOR,获取的结构中信息全是0,有人遇到过吗?![图片说明](https://img-ask.csdn.net/upload/201509/07/1441597447_656328.png)
C# 如何读取移动硬盘的HDDSN号,不是板子序列号,急求!!
C# 需要读取移动硬盘的HDDSN,不是移动硬盘上的板子的序列号 板子上的序列号,我可以通过代码获取。DeviceIoControl 方法的实例,最好 C++ 的话,听说DeviceIoControl是可以获取。但是我想用C#来实现.
CreateFile操作驱动器的权限问题
开发环境:win7 64位 开发工具:VS2010 **开发背景:AxtiveX插件(DLL项目) 宿主为浏览器** _问题描述:_ 在使用C++代码获取硬盘序列号的时候,使用到了CreateFile函数。主要用到了CreateFile、DeviceIoControl函数。把关键代码提取到一个Win32工程下时: 问题1:生成的exe程序,可以在本机直接双击运行获取到序列号,但是在别的机器就需要使用管理员权限(XP系统除外),是为什么? 问题2:如果是exe程序: 可以设置UAC的执行级别为administrator,或者右键使用管理员权限运行,获取序列号。但是如果要在DLL工程中怎么办? (**现在的目的就是想如何在代码里实现普通用户操作驱动器的问题(不考虑XP)?**) 说明: 尝试使用过 http://bbs.csdn.net/topics/250018148 的解决方案没有解决问题,也尝试在代码里提权(AdjustTokenPrivileges),也没有解决问题。
应用程序与驱动程序共享内存问题
在应用程序中构建一块内存;在驱动程序的DeviceIoControl处理函数中,通过(PUCHAR)MmGetSystemAddressForMdl(Irp->MdlAddress)可以获得该共享内存的地址,但是处理函数调用IoCompleteRequest后,映射关系就结束,这个地址也就不能用了。怎么在驱动程序里一直保存这个内存地址并一直使用呢?求解答。
驱动程序与应用程序间中断事件传递问题
大家好,我想通过电脑上的一个PCI9052的板卡每次接收到一个中断,应用程序就执行一次指定的函数。我写了C++的应用程序,也照猫画虎写了一个简单的PCI驱动,功能实现了。可问题就是当我循环发送这个中断的时候,电脑会死机!!有时候函数执行了几百次,多的时候能执行几千次,但最后都死机了。死机时不光程序死了,连鼠标都没用了,只用重启。我把我实现这个功能的程序写在了下面,各位大侠帮忙看看会是哪的问题呢?是不是我的应用程序和驱动程序这种交互方式有问题? 应用程序: 先使用下面语句创建了一个事件 hDecodeEvent = CreateEvent(NULL,FALSE,FALSE,NULL); 把上面的事件传给驱动程序 // 向NCDIVER下传译码线程事件 bResult = DeviceIoControl(hDevice, // device to be queried NC_TRANSMIT_EVENT, // operation to perform &hDecodeEvent, sizeof(hDecodeEvent), // input buffer NULL,0, // output buffer &junk, // # bytes returned (LPOVERLAPPED) NULL); // synchronous I/O 在一个线程中死循环等待驱动程序激活这个事件,一旦激活就调用一个函数 DWORD WINAPI DecodeWaitThreadProc(LPVOID lpParam) { while (1) { WaitForSingleObject(hDecodeEvent,INFINITE); //等待事件激活 InterpdllCallbackFunction(); //激活后调用这个函数 } return 0; } 驱动程序: 在驱动程序中这样接收事件 case NC_TRANSMIT_EVENT: pdx->hUserDecodeEvent = *(HANDLE*)Irp->AssociatedIrp.SystemBuffer; status=ObReferenceObjectByHandle(pdx->hUserDecodeEvent, EVENT_MODIFY_STATE, *ExEventObjectType, KernelMode, (PVOID*) &pdx->pDecodeEvent, NULL); break; 驱动程序接收到中断后这样设置事件来通知应用程序 if(pdx->pDecodeEvent != NULL) KeSetEvent(pdx->pDecodeEvent, IO_NO_INCREMENT,FALSE);//通知应用程序,中断的到来
关于mini2440在wince系统下的LED测试程序
小白一个,关于软硬件调用,Io控制这一块很不明白 程序中,通过CreateFile(L"LED1:",......)创建一个句柄,下面又用DeviceIoControl()来实现点亮小灯。 这个“LED1:”是个什么意思呢,还有如何实现小灯的亮灭的? 通过什么方式控制Io口输出低电平的?
在不写驱动程序的情况下,怎么获取U盘的flash id
之前使用deviceiocontrol发送SCSI标准命令,但好像没法获得flashid这样的信息,不知道有什么办法可以获取吗?在网上搜到的很多都是工具,他们都是可以获取到的,不知道是怎么实现的,还请大牛指点一二
这是一个C++写的Windows下读取CPU温度的程序但是读不出来温度啊?
我是VC6写的代码如下 顺便问下大家谁有读windows的CPU占用率和内存占用的程序 小弟很急啊 在线等希望各位大神能够出手帮助啊 #include "stdafx.h" #include "CPUTemperature.h" #include "CPUTemperatureDlg.h" #include <Windows.h> #include <Winsvc.h> #include <WinIoCtl.h> #ifdef _DEBUG #define new DEBUG_NEW #endif #define MYWINRIN0 _T("MyWinRing0") #define OLS_DRIVER_ID _T("WinRing0_1_2_0") #define OLS_TYPE 40000 #define IOCTL_OLS_READ_MSR \ CTL_CODE(OLS_TYPE, 0x821, METHOD_BUFFERED, FILE_ANY_ACCESS) BOOL gIsMsr = TRUE; TCHAR gDriverPath[MAX_PATH]; HANDLE gHandle = INVALID_HANDLE_VALUE; void LoadDriver(); BOOL StopDriver(SC_HANDLE hSCManager,LPCTSTR DriverId); BOOL RemoveDriver(SC_HANDLE hSCManager, LPCTSTR DriverId); BOOL IsFileExist(LPCTSTR fileName); BOOL Initialize(); void LoadDriver(); BOOL OpenDriver(); void Remove(); BOOL WINAPI Rdmsr(DWORD index, PDWORD eax, PDWORD edx); CCPUTemperatureDlg::CCPUTemperatureDlg(CWnd* pParent /*=NULL*/) : CDialog(CCPUTemperatureDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CCPUTemperatureDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CCPUTemperatureDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_WM_TIMER() END_MESSAGE_MAP() BOOL CCPUTemperatureDlg::OnInitDialog() { CDialog::OnInitDialog(); SetTimer(123,1000,NULL); Remove(); Initialize(); return TRUE; } void Remove() { SC_HANDLE hSCManager = NULL; hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); StopDriver(hSCManager,MYWINRIN0); RemoveDriver(hSCManager,MYWINRIN0); CloseServiceHandle(hSCManager); } //打开驱动 BOOL OpenDriver() { char message[256]="0"; char *str=_T("\\\\.\\") OLS_DRIVER_ID ; gHandle = CreateFile( _T("\\\\.\\") OLS_DRIVER_ID, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); int code=GetLastError(); if(gHandle == INVALID_HANDLE_VALUE) { return FALSE; } return TRUE; } BOOL Initialize() { TCHAR dir[MAX_PATH]; TCHAR *ptr; GetModuleFileName(NULL, dir, MAX_PATH); if((ptr = _tcsrchr(dir, '\\')) != NULL) { *ptr = '\0'; } wsprintf(gDriverPath, _T("%s\\%s"), dir, _T("WinRing0.sys")); if(IsFileExist(gDriverPath) == FALSE) { return FALSE; } if(OpenDriver()) { return TRUE; } else { LoadDriver(); OpenDriver(); } } BOOL IsFileExist(LPCTSTR fileName) { WIN32_FIND_DATA findData; HANDLE hFile = FindFirstFile(fileName, &findData); if(hFile != INVALID_HANDLE_VALUE) { FindClose( hFile ); return TRUE; } else { return FALSE; } } //加载驱动 void LoadDriver() { SC_HANDLE hSCManager = NULL; SC_HANDLE hService = NULL; SC_HANDLE hService1 = NULL; hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); hService = CreateService(hSCManager, MYWINRIN0, MYWINRIN0, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, gDriverPath, NULL, NULL, NULL, NULL, NULL ); CloseServiceHandle(hService); hService1 = OpenService(hSCManager, MYWINRIN0, SERVICE_ALL_ACCESS); int result=StartService(hService1, 0, NULL); CloseServiceHandle(hSCManager); CloseServiceHandle(hService1); } BOOL StopDriver(SC_HANDLE hSCManager,LPCTSTR DriverId) { SC_HANDLE hService = NULL; BOOL rCode = FALSE; SERVICE_STATUS serviceStatus; DWORD error = NO_ERROR; hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS); if(hService != NULL) { rCode = ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus); error = GetLastError(); CloseServiceHandle(hService); } return rCode; } BOOL RemoveDriver(SC_HANDLE hSCManager, LPCTSTR DriverId) { SC_HANDLE hService = NULL; BOOL rCode = FALSE; hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS); if(hService == NULL) { rCode = TRUE; } else { rCode = DeleteService(hService); CloseServiceHandle(hService); } return rCode; } DWORD GetCpuInfo( DWORD veax) { DWORD deax, debx, decx, dedx; __asm { push eax; push ebx; push ecx; push edx; mov eax, veax; cpuid; mov deax, eax; mov debx, ebx; mov decx, ecx; mov dedx, edx; pop edx; pop ecx; pop ebx; pop eax; } return deax; } //读取msr寄存器 BOOL WINAPI Rdmsr(DWORD index, PDWORD eax, PDWORD edx) { if(gHandle == INVALID_HANDLE_VALUE) { return FALSE; } if(eax == NULL || edx == NULL || gIsMsr == FALSE) { return FALSE; } DWORD returnedLength = 0; BOOL result = FALSE; BYTE outBuf[8] = {0}; result = DeviceIoControl( gHandle, IOCTL_OLS_READ_MSR, &index, sizeof(index), &outBuf, sizeof(outBuf), &returnedLength, NULL ); if(result) { memcpy(eax, outBuf, 4); memcpy(edx, outBuf + 4, 4); } if(result) { return TRUE; } else { return FALSE; } } void CCPUTemperatureDlg::OnCancel() { //卸载驱动 Remove(); CDialog::OnCancel(); } void CCPUTemperatureDlg::OnTimer(UINT_PTR nIDEvent) { DWORD eax_in; DWORD eax_out; eax_in= 1; eax_out= GetCpuInfo(eax_in); eax_in= 0; eax_out= GetCpuInfo(eax_in); eax_in= 6; eax_out= GetCpuInfo(eax_in); CEdit *edit=(CEdit*)GetDlgItem(IDC_EDIT1); CEdit *edit1=(CEdit*)GetDlgItem(IDC_EDIT2); DWORD eax=0,edx=0; ULONG result; char s[20]; Rdmsr(0xee,&eax,&edx); Rdmsr(0x1a2,&eax,&edx); result=SetThreadAffinityMask(GetCurrentThread(),1); Rdmsr(0x19c,&eax,&edx);//read Temperature //SetThreadAffinityMask(GetCurrentThread(),result); sprintf(s,"%d",100-((eax&0x007f0000)>>16)); SetThreadAffinityMask(GetCurrentThread(),result); edit->SetWindowText(s); result=SetThreadAffinityMask(GetCurrentThread(),2); Rdmsr(0x19c,&eax,&edx);//read Temperature SetThreadAffinityMask(GetCurrentThread(),result); sprintf(s,"%d",100-((eax&0x007f0000)>>16)); edit1->SetWindowText(s); CDialog::OnTimer(nIDEvent); }
VC如何获取硬盘smart信息,如硬盘通电累计时间和通电次数等等
主要是想用deviceiocontrol获取到这些信息,但是网上查询不到方法,小白不是太懂这个,求告知
求大神帮我运行这个代码,操作系统磁盘的直接读写。不知道错误的原因是不是因为没有软盘,
#include<windows.h> //说明sdk的头文件 //#include"floppy.h" #include<stdlib.h> #include<stdio.h> typedef struct disk //Disk是结构体指针 { HANDLE floppyDisk; DISK_GEOMETRY theSupportedGeometry; }*Disk; //以下为程序中用到的四个函数 Disk openfloppy(char driveLetter); //打开软盘,并获取相关物理信息,存入返回的一个disk结构的theSupportetry项中 char interwindow(); //功能选择接口 bool physicalDisk(Disk theDisk); //将获得磁盘的物理参数显示出来 bool sectorDump(Disk theDisk); //读取特定的磁盘区域的内容并将他们显示出来(文本和十六制两种方式) BOOL sectorRead(Disk theDisk,unsigned logSectorNumber,char*RdBuf); //从某磁盘扇区中读出指定字节数量的数据到指定缓冲区RdBuf BOOL sectorWrite(Disk theDisk); //从指定缓冲区WrBuf写指定字节数量的数据到某磁盘扇区中; void main() { Disk theDisk=NULL; char choice; choice=interwindow(); while(choice!='4') //每一次循环中实现对磁盘的一次操作 { if (theDisk==NULL) { theDisk=openfloppy ('a'); } if (choice=='1') { if((physicalDisk(theDisk))==false) printf("Open Floppy Error!\n"); } else if(choice=='2') { if ((sectorWrite(theDisk))==false) printf("Write to Floppy Error!\n"); } else if(choice=='3') { if((sectorDump(theDisk))==false) printf("Read from Floppy Error!\n"); } else printf("wrong choice\n"); printf("press any key to return\n"); getchar(); choice=interwindow(); } if(theDisk!=NULL) CloseHandle(theDisk->floppyDisk); { char interwindow() //选择功能接口 { system("cls"); char choice='1'; printf("\n\n\n\n\n *********disk I/O test*********\n\n"); printf(" push 1 to get the information of disk\n\n"); printf(" push 2 to write information to a sector \n\n"); printf(" push 3 to read a sector from disk\n\n"); printf(" push 4 to exit from the test\n\n"); printf(" Your choice is: "); choice=getchar(); getchar(); return choice; } bool physicalDisk(Disk theDisk) { if (theDisk==NULL) { printf("there is no disk available!\n"); return false; } printf("Disk Infomation:\n"); //显示信息 printf("\tButesperSector:"); printf("%d\n",theDisk->theSupportedGeometry.BytesPerSector); printf("\tSectorsperTrack;"); printf("%d\n,theDisk->theSupportedGeometry.SectorsperTrack"); printf("\tTracksperCylinder:"); printf("%d\n",theDisk->theSupportedGeometry.TracksPerCylinder); printf("\tCylinders:"); printf("%d\n",theDisk->theSupportedGeometry.Cylinders); printf("\n\n"); return true; } Disk openfloppy(char driveLetter) { Disk theDisk; char buffer[]="\\\\.\\::"; buffer[4]=driveLetter; theDisk=(struct disk *)malloc(100 DWORD ReturnSize; HANDLE floppyDisk; floppyDisk=CreateFile (buffer,GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS|FILE_FLAG_NO_BUFFERING,NULL); //打开磁盘 if(!DeviceIoControl(floppyDisk,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&(theDisk->theSupportedGeometry),50,&ReturnSize,NULL)) //获取它的物理参数 { return NULL; } theDisk->floppyDisk=floppyDisk; return(theDisk); //返回disk结构以供后用 } bool sectorDump(Disk theDisk) //读取特定的磁盘区域的内容并将他们显示出来(文本和十六进制两种方式) { char RdBuf[512]; int logSectorNumber; if(theDisk==NULL) { printf("there is no disk available!\n"); return false; } printf("please Input the Sector NO to read from:"); //从磁盘某扇区中读出内容并显示(文本和十六进制两种方式) scanf("%d",&logSectorNumber); printf("\n"); printf("Content:\n"); if(!sectorRead(theDisk,logSectorNumber,RdBuf)) { printf("Errors Occurred while Reading the Sector!\n"); return false; } printf("\t Text content!\n"); for(int i=0;i<512;i++) { printf("%c",RdBuf[i]); } printf("\n"); printf("\tHex Content:\n"); for(i=0;i<512;i++) { printf("%x",RdBuf[i]); printf(" "); } printf("\n"); getchar(); return true; } BOOL sectorRead(Disk theDisk,unsigned logSectorNumber,char*RdBuf) //从某磁盘扇区中读出指定山区里的数据到指定缓冲区RdBuf { DWORD BytesRead; long sectortomove=logSectorNumber*(theDisk->theSupportedGeometry.BytesPerSector); SetFilePointer(theDisk->floppyDisk,sectortomove,NULL,FILE_BEGIN); if(!ReadFile(theDisk->floppyDisk,RdBuf,512,&BytesRead,NULL)) { return FALSE; } return true; } BOOL sectorWrite(Disk theDisk) //将用户输入的数据写到指定的磁盘扇区中去 { DWORD BytesWrite; char WrBuf[512]; int logSectorNumber; if(theDisk==NULL) { printf("there is no disk available!\n"); return false; } printf("Please Input the Secor NO to write to :\n(press enter for end)"); scanf("%d",&logSectorNumber); getchar(); printf("\n"); printf("Please input the content to write to disk A:\n"); gets(WrBuf); //当向WrBuf处输入的字节数超过该数组长(此为512),则系统会报错 long sectortomove=logSectorNumber*(theDisk->theSupportedGeometry.BytesPerSector); SetFilePointer(theDisk->floppyDisk,sectortomove,NULL,FILE_BEGIN); //下面的WriteFile的第三个参数只能取512的倍数,输入不足 if(!WriteFile(theDisk->floppyDisk,WrBuf,512,&BytesWrite,NULL)) //此数时,系统自己不足(填入WrBuf中的默认值) { printf("write failed\n"); return false; } printf("write coplete successfully\n"); return true; }
C++代码获取硬盘编号失败
使用DeviceIoControl 获取硬盘编号的时候,对有的硬盘不可行,返回空。搜集了网上大部分都是使用这个方法来获取硬盘属性。是不是还有其他方法可以获取啊
C++谁帮忙看下代码?为什么的老是错误
[微软官方地址](https://technet.microsoft.com/en-us/library/dd442656.aspx/css "") ![图片说明](https://img-ask.csdn.net/upload/201611/16/1479274058_920389.png) ``` STDMETHODIMP CheckFileSystem( PCWSTR pcwszDrive ) { HRESULT hr = S_OK; HANDLE hDisk = INVALID_HANDLE_VALUE; BOOL fResult = FALSE; ULONG BytesReturned = 0; FILE_SYSTEM_RECOGNITION_INFORMATION FsRi = {0}; // // Open the target, for example "\\.\C:" // wprintf( L"CreateFile on %s...", pcwszDrive ); hDisk = CreateFile( pcwszDrive, FILE_READ_ATTRIBUTES|SYNCHRONIZE|FILE_TRAVERSE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); if( hDisk == INVALID_HANDLE_VALUE ) { hr = HRESULT_FROM_WIN32( GetLastError() ); wprintf( L"CreateFile failed on %s, GLE = 0x%x\n", pcwszDrive, GetLastError() ); goto exit; } wprintf( L"succeeded.\n\n" ); wprintf( L"\nPress Any Key to send down the FSCTL\n" ); _getwch(); // // Send down the FSCTL // wprintf( L"Calling DeviceIoControl( FSCTL_QUERY_FILE_SYSTEM_RECOGNITION ) " ); fResult = DeviceIoControl( hDisk, FSCTL_QUERY_FILE_SYSTEM_RECOGNITION, NULL, 0, &FsRi, sizeof(FsRi), &BytesReturned, NULL ); if( !fResult ) { hr = HRESULT_FROM_WIN32( GetLastError() ); wprintf( L"failed GLE = 0x%x\n", GetLastError() ); goto exit; } wprintf( L"succeeded.\n\n" ); wprintf( L"FSCTL_QUERY_FILE_SYSTEM_RECOGNITION returned success.\n" ); wprintf( L"FSCTL_QUERY_FILE_SYSTEM_RECOGNITION retrieved \"%S\".\n", FsRi.FileSystem ); exit: if( hDisk != INVALID_HANDLE_VALUE ) { CloseHandle( hDisk ); hDisk = INVALID_HANDLE_VALUE; } return hr; } ```
上周服务器重启后得到dump,帮忙分析~
Microsoft (R) Windows Debugger Version 6.7.0005.1 Copyright (c) Microsoft Corporation. All rights reserved. Loading Dump File [C:\Users\Michelle\Desktop\MEMORY.DMP] Kernel Summary Dump File: Only kernel address space is available Symbol search path is: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols Executable search path is: Windows Kernel Version 7601 (Service Pack 1) MP (64 procs) Free x64 Product: Server, suite: Enterprise TerminalServer Built by: 7601.23677.amd64fre.win7sp1_ldr.170209-0600 Kernel base = 0xfffff800`02604000 PsLoadedModuleList = 0xfffff800`02846730 Debug session time: Fri Nov 30 16:20:38.309 2018 (GMT+8) System Uptime: 386 days 22:42:18.097 Loading Kernel Symbols ................................................................................................................................................. Loading User Symbols PEB is paged out (Peb.Ldr = 000007ff`fffd8018). Type ".hh dbgerr001" for details Loading unloaded module list .................................................. ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck 3B, {c0000005, fffff88009fcee54, fffff88023f78d40, 0} Probably caused by : rdpdr.sys ( rdpdr!CTransportVC::CloseChannels+18 ) Followup: MachineOwner --------- 48: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* SYSTEM_SERVICE_EXCEPTION (3b) An exception happened while executing a system service routine. Arguments: Arg1: 00000000c0000005, Exception code that caused the bugcheck Arg2: fffff88009fcee54, Address of the exception record for the exception that caused the bugcheck Arg3: fffff88023f78d40, Address of the context record for the exception that caused the bugcheck Arg4: 0000000000000000, zero. Debugging Details: ------------------ EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%p FAULTING_IP: rdpdr!CTransportVC::CloseChannels+18 fffff880`09fcee54 488b4148 mov rax,qword ptr [rcx+48h] CONTEXT: fffff88023f78d40 -- (.cxr 0xfffff88023f78d40) rax=0000000000000001 rbx=0000000000000000 rcx=0000000000000000 rdx=0000000000000001 rsi=0000000000000000 rdi=fffffa803388c0b0 rip=fffff88009fcee54 rsp=fffff88023f79720 rbp=0000000000000001 r8=0000000000000000 r9=0000000000000000 r10=002d005000440052 r11=fffff88023f79880 r12=000000000000493a r13=0000000000000000 r14=000000000000493a r15=0000000000000003 iopl=0 nv up ei ng nz na pe nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010282 rdpdr!CTransportVC::CloseChannels+0x18: fffff880`09fcee54 488b4148 mov rax,qword ptr [rcx+48h] ds:002b:00000000`00000048=???????????????? Resetting default scope DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT BUGCHECK_STR: 0x3B PROCESS_NAME: svchost.exe CURRENT_IRQL: 0 LAST_CONTROL_TRANSFER: from fffff88009fcbd7b to fffff88009fcee54 STACK_TEXT: fffff880`23f79720 fffff880`09fcbd7b : 00000000`00000000 00000000`00000001 00000000`00000000 fffff880`09fcb6d5 : rdpdr!CTransportVC::CloseChannels+0x18 fffff880`23f79760 fffff880`09fcb5c9 : 00000000`00000000 fffffa80`20c0ef50 00000000`00000000 00000000`0000493a : rdpdr!CVCSession::Disconnect+0x7b fffff880`23f797b0 fffff880`09fcb43b : 00000000`00000000 fffff880`23f79880 fffffa80`3388c0b0 fffffa80`20c0ef50 : rdpdr!CDynVC::NotifySessionDisconnected+0x71 fffff880`23f797e0 fffff880`09fcd0fc : 00000000`00003020 fffffa80`20c04870 00000000`0233e280 fffffa80`4e814cc8 : rdpdr!CDynVC::NotifySessionConnected+0x47 fffff880`23f79830 fffff880`09fcb020 : 00000000`00003924 fffff8a0`09e10afe fffffa80`23297860 fffff880`23f79920 : rdpdr!CFileVC::DeviceIoControl+0x15c fffff880`23f79910 fffff880`09fbaa19 : fffffa80`23297860 fffff8a0`09e10af0 00000000`00000000 fffffa80`19ae84b0 : rdpdr!DYNVC_Dispatch+0x70 fffff880`23f79940 fffff800`029832ca : 00000000`00000002 00000000`00000002 fffffa80`24c06110 fffffa80`23297860 : rdpdr!DrPeekDispatch+0x61 fffff880`23f79990 fffff800`0299756a : fffffa80`24c06110 fffffa80`24c06110 fffffa80`24c06110 fffff880`03516180 : nt!IopSynchronousServiceTail+0xfa fffff880`23f79a00 fffff800`02997606 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0xc27 fffff880`23f79b40 fffff800`026726d3 : 00000000`00000018 00000000`0233ea50 00000000`0233e770 00000000`01e0fc40 : nt!NtDeviceIoControlFile+0x56 fffff880`23f79bb0 00000000`777abdaa : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13 00000000`0233e0f8 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x777abdaa FOLLOWUP_IP: rdpdr!CTransportVC::CloseChannels+18 fffff880`09fcee54 488b4148 mov rax,qword ptr [rcx+48h] SYMBOL_STACK_INDEX: 0 SYMBOL_NAME: rdpdr!CTransportVC::CloseChannels+18 FOLLOWUP_NAME: MachineOwner MODULE_NAME: rdpdr IMAGE_NAME: rdpdr.sys DEBUG_FLR_IMAGE_TIMESTAMP: 4ce7abc1 STACK_COMMAND: .cxr 0xfffff88023f78d40 ; kb FAILURE_BUCKET_ID: X64_0x3B_rdpdr!CTransportVC::CloseChannels+18 BUCKET_ID: X64_0x3B_rdpdr!CTransportVC::CloseChannels+18 Followup: MachineOwner --------- 48: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* SYSTEM_SERVICE_EXCEPTION (3b) An exception happened while executing a system service routine. Arguments: Arg1: 00000000c0000005, Exception code that caused the bugcheck Arg2: fffff88009fcee54, Address of the exception record for the exception that caused the bugcheck Arg3: fffff88023f78d40, Address of the context record for the exception that caused the bugcheck Arg4: 0000000000000000, zero. Debugging Details: ------------------ EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%p FAULTING_IP: rdpdr!CTransportVC::CloseChannels+18 fffff880`09fcee54 488b4148 mov rax,qword ptr [rcx+48h] CONTEXT: fffff88023f78d40 -- (.cxr 0xfffff88023f78d40) rax=0000000000000001 rbx=0000000000000000 rcx=0000000000000000 rdx=0000000000000001 rsi=0000000000000000 rdi=fffffa803388c0b0 rip=fffff88009fcee54 rsp=fffff88023f79720 rbp=0000000000000001 r8=0000000000000000 r9=0000000000000000 r10=002d005000440052 r11=fffff88023f79880 r12=000000000000493a r13=0000000000000000 r14=000000000000493a r15=0000000000000003 iopl=0 nv up ei ng nz na pe nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010282 rdpdr!CTransportVC::CloseChannels+0x18: fffff880`09fcee54 488b4148 mov rax,qword ptr [rcx+48h] ds:002b:00000000`00000048=???????????????? Resetting default scope DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT BUGCHECK_STR: 0x3B PROCESS_NAME: svchost.exe CURRENT_IRQL: 0 LAST_CONTROL_TRANSFER: from fffff88009fcbd7b to fffff88009fcee54 STACK_TEXT: fffff880`23f79720 fffff880`09fcbd7b : 00000000`00000000 00000000`00000001 00000000`00000000 fffff880`09fcb6d5 : rdpdr!CTransportVC::CloseChannels+0x18 fffff880`23f79760 fffff880`09fcb5c9 : 00000000`00000000 fffffa80`20c0ef50 00000000`00000000 00000000`0000493a : rdpdr!CVCSession::Disconnect+0x7b fffff880`23f797b0 fffff880`09fcb43b : 00000000`00000000 fffff880`23f79880 fffffa80`3388c0b0 fffffa80`20c0ef50 : rdpdr!CDynVC::NotifySessionDisconnected+0x71 fffff880`23f797e0 fffff880`09fcd0fc : 00000000`00003020 fffffa80`20c04870 00000000`0233e280 fffffa80`4e814cc8 : rdpdr!CDynVC::NotifySessionConnected+0x47 fffff880`23f79830 fffff880`09fcb020 : 00000000`00003924 fffff8a0`09e10afe fffffa80`23297860 fffff880`23f79920 : rdpdr!CFileVC::DeviceIoControl+0x15c fffff880`23f79910 fffff880`09fbaa19 : fffffa80`23297860 fffff8a0`09e10af0 00000000`00000000 fffffa80`19ae84b0 : rdpdr!DYNVC_Dispatch+0x70 fffff880`23f79940 fffff800`029832ca : 00000000`00000002 00000000`00000002 fffffa80`24c06110 fffffa80`23297860 : rdpdr!DrPeekDispatch+0x61 fffff880`23f79990 fffff800`0299756a : fffffa80`24c06110 fffffa80`24c06110 fffffa80`24c06110 fffff880`03516180 : nt!IopSynchronousServiceTail+0xfa fffff880`23f79a00 fffff800`02997606 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0xc27 fffff880`23f79b40 fffff800`026726d3 : 00000000`00000018 00000000`0233ea50 00000000`0233e770 00000000`01e0fc40 : nt!NtDeviceIoControlFile+0x56 fffff880`23f79bb0 00000000`777abdaa : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13 00000000`0233e0f8 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x777abdaa FOLLOWUP_IP: rdpdr!CTransportVC::CloseChannels+18 fffff880`09fcee54 488b4148 mov rax,qword ptr [rcx+48h] SYMBOL_STACK_INDEX: 0 SYMBOL_NAME: rdpdr!CTransportVC::CloseChannels+18 FOLLOWUP_NAME: MachineOwner MODULE_NAME: rdpdr IMAGE_NAME: rdpdr.sys DEBUG_FLR_IMAGE_TIMESTAMP: 4ce7abc1 STACK_COMMAND: .cxr 0xfffff88023f78d40 ; kb FAILURE_BUCKET_ID: X64_0x3B_rdpdr!CTransportVC::CloseChannels+18 BUCKET_ID: X64_0x3B_rdpdr!CTransportVC::CloseChannels+18 Followup: MachineOwner --------- 48: kd> .dll ^ Syntax error in '.dll' 48: kd> !dlls Unable to read nt!_PEB_LDR_DATA type at 0000000000000000
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
MyBatis研习录(01)——MyBatis概述与入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
Python爬虫精简步骤1 获取数据
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。 爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?广州的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。 这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。 从搜索巨头到人工...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
web前端javascript+jquery知识点总结
1.Javascript 语法.用途 javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序...
Python:爬取疫情每日数据
前言 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 以全国、湖北和上海为例,分别为以下三个网站: 国家卫健委官网:http://www.nhc.gov.cn/xcs/yqtb/list_gzbd.shtml 湖北卫健委官网:http://wjw.hubei.gov.cn/bmdt/ztzl/fkxxgzbdgrfyyq/xxfb...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
粒子群算法求解物流配送路线问题(python)
1.Matlab实现粒子群算法的程序代码:https://www.cnblogs.com/kexinxin/p/9858664.html matlab代码求解函数最优值:https://blog.csdn.net/zyqblog/article/details/80829043 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
情人节来了,教你个用 Python 表白的技巧
作者:@明哥 公众号:Python编程时光 2020年,这个看起来如此浪漫的年份,你还是一个人吗? 难不成我还能是一条狗? 18年的时候,写过一篇介绍如何使用 Python 来表白的文章。 虽然创意和使用效果都不错,但有一缺点,这是那个exe文件,女神需要打开电脑,才有可能参与进来,进而被你成功"调戏”。 由于是很早期的文章了,应该有很多人没有看过。 没有看过的,你可以点击这里查看:用Pyt...
用Python开发实用程序 – 计算器
作者:隋顺意 一段时间前,自己制作了一个库 “sui-math”。这其实是math的翻版。做完后,python既然可以轻易的完成任何的数学计算,何不用python开发一个小程序专门用以计算呢? 现在我们越来越依赖于计算器,很多复杂的计算都离不开它。我们使用过各式各样的计算器,无论是电脑自带的,还是网也上的计算器,却都没有自己动手编写属于自己计算器。今天就让我们走进计算器的世界,用python来编写...
经典算法(19)教你两分钟学会【选择排序】
这篇博客使用图文并茂的方式讲解选择排序算法,并有完整的算法逻辑以及代码实现。
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
用Python打造你的专属情人节贺卡,赶快发给TA浪漫一下吧
明天就是情人节了。这个情人节,注定是一个不能约会的情人节,但不能约会不代表不能浪漫。古人比我们出生早,那些浪漫的诗词早都被他们挖掘一空,比诗词我们肯定没有机会了。好在我们还有Python,不然都不知道该如何表达浪漫。接下来,浪导教你制作一个浪漫的情人节专属贺卡。
Python绘图与可视化
文章目录使用的库Matplotlib程序包绘图命令的扩展及其属性设置 使用的库 Python有很多可视化工具,如:Matplotlib。 Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本、IPython的交互环境下、Web应用程序中使用。如果结合使用一种GUI工具包(如IPython),Matplotlib还具有诸如缩放和平移等交互功能。它不仅支持各...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问