用C 怎么取主板序列号?

wjoin 2004-04-28 09:31:07
软件加密用,想通过识别主板序列号来达到加密的目地,使用C 或C++ 标准库。
...全文
667 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanoble 2004-05-11
  • 打赏
  • 举报
回复
very good!
收藏!
lordor 2004-05-10
  • 打赏
  • 举报
回复
void main()
{
printf("The Hard Disk ID is :%s" , RegisterToStart());
getchar();
}

给你一个取硬盘号的东西
lordor 2004-05-10
  • 打赏
  • 举报
回复

char *ConvertToString2 (DWORD diskdata [256], int firstIndex, int lastIndex)
{
static char string [1024];
int index = 0;
int position = 0;

// each integer has two characters stored in it backwards
for (index = firstIndex; index <= lastIndex; index++)
{
// get high byte for 1st character
string [position] = (char) (diskdata [index] / 256);
position++;

// get low byte for 2nd character
string [position] = (char) (diskdata [index] % 256);
position++;
}

// end the string
string [position] = '\0';

// cut off the trailing blanks
for (index = position - 1; index > 0 && ' ' == string [index]; index--)
string [index] = '\0';

return string;
}

int WinNTHDSerialNumAsScsiRead (DWORD * buffer)
{

buffer[0]='\n';
int controller = 0;

// for (controller = 0; controller < 2; controller++)
{
HANDLE hScsiDriveIOCTL = 0;
char driveName [256];
// Try to get a handle to PhysicalDrive IOCTL, report failure
// and exit if can't.
sprintf (driveName, "\\\\.\\Scsi%d:", controller);
// driveName="\\\\.\\Scsi0";
// Windows NT, Windows 2000, any rights should do
hScsiDriveIOCTL = CreateFile (driveName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);
// if (hScsiDriveIOCTL == INVALID_HANDLE_VALUE)
// printf ("Unable to open SCSI controller %d, error code: 0x%lX\n",
// controller, GetLastError ());

if (hScsiDriveIOCTL != INVALID_HANDLE_VALUE)
{
int drive = 0;

for (drive = 0; drive < 2; drive++)
{
char buffer [sizeof (SRB_IO_CONTROL) + SENDIDLENGTH];
SRB_IO_CONTROL *p = (SRB_IO_CONTROL *) buffer;
SENDCMDINPARAMS *pin =
(SENDCMDINPARAMS *) (buffer + sizeof (SRB_IO_CONTROL));
DWORD dummy;

memset (buffer, 0, sizeof (buffer));
p -> HeaderLength = sizeof (SRB_IO_CONTROL);
p -> Timeout = 10000;
p -> Length = SENDIDLENGTH;
p -> ControlCode = IOCTL_SCSI_MINIPORT_IDENTIFY;
strncpy ((char *) p -> Signature, "SCSIDISK", 8);

pin -> irDriveRegs.bCommandReg = IDE_ATA_IDENTIFY;
pin -> bDriveNumber = drive;

if (DeviceIoControl (hScsiDriveIOCTL, IOCTL_SCSI_MINIPORT,
buffer,
sizeof (SRB_IO_CONTROL) +
sizeof (SENDCMDINPARAMS) - 1,
buffer,
sizeof (SRB_IO_CONTROL) + SENDIDLENGTH,
&dummy, NULL))
{
SENDCMDOUTPARAMS *pOut =
(SENDCMDOUTPARAMS *) (buffer + sizeof (SRB_IO_CONTROL));
IDSECTOR *pId = (IDSECTOR *) (pOut -> bBuffer);
if (pId -> sModelNumber [0])
{
int ijk = 0;
USHORT *pIdSector = (USHORT *) pId;

for (ijk = 0; ijk < 256; ijk++)
buffer[ijk] =(char)pIdSector [ijk];
// PrintIdeInfo (controller * 2 + drive, diskdata);
return 1;
}
}
}
CloseHandle (hScsiDriveIOCTL);
}
}

return -1;
}
BOOL DoIDENTIFY (HANDLE hPhysicalDriveIOCTL, PSENDCMDINPARAMS pSCIP,
PSENDCMDOUTPARAMS pSCOP, BYTE bIDCmd, BYTE bDriveNum,
PDWORD lpcbBytesReturned)
{
// Set up data structures for IDENTIFY command.
pSCIP -> cBufferSize = IDENTIFY_BUFFER_SIZE;
pSCIP -> irDriveRegs.bFeaturesReg = 0;
pSCIP -> irDriveRegs.bSectorCountReg = 1;
pSCIP -> irDriveRegs.bSectorNumberReg = 1;
pSCIP -> irDriveRegs.bCylLowReg = 0;
pSCIP -> irDriveRegs.bCylHighReg = 0;

// Compute the drive number.
pSCIP -> irDriveRegs.bDriveHeadReg = 0xA0 | ((bDriveNum & 1) << 4);

// The command can either be IDE identify or ATAPI identify.
pSCIP -> irDriveRegs.bCommandReg = bIDCmd;
pSCIP -> bDriveNumber = bDriveNum;
pSCIP -> cBufferSize = IDENTIFY_BUFFER_SIZE;

return ( DeviceIoControl (hPhysicalDriveIOCTL, DFP_RECEIVE_DRIVE_DATA,
(LPVOID) pSCIP,
sizeof(SENDCMDINPARAMS) - 1,
(LPVOID) pSCOP,
sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1,
lpcbBytesReturned, NULL) );
}

int WinNTHDSerialNumAsPhysicalRead (DWORD * buffer)
{
#define DFP_GET_VERSION 0x00074080
BYTE IdOutCmd [sizeof (SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1];

int done = FALSE;
int drive = 0;

// for (drive = 0; drive < MAX_IDE_DRIVES; drive++)
{
HANDLE hPhysicalDriveIOCTL = 0;

// Try to get a handle to PhysicalDrive IOCTL, report failure
// and exit if can't.
char driveName [256];

wsprintf (driveName, "\\\\.\\PhysicalDrive%d", drive);

// Windows NT, Windows 2000, must have admin rights
hPhysicalDriveIOCTL = CreateFile (driveName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);
// if (hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE)
// printf ("Unable to open physical drive %d, error code: 0x%lX\n",
// drive, GetLastError ());

if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
{
GETVERSIONOUTPARAMS VersionParams;
DWORD cbBytesReturned = 0;

// Get the version, etc of PhysicalDrive IOCTL
memset ((void*) &VersionParams, 0, sizeof(VersionParams));

if ( ! DeviceIoControl (hPhysicalDriveIOCTL, DFP_GET_VERSION,
NULL,
0,
&VersionParams,
sizeof(VersionParams),
&cbBytesReturned, NULL) )
{
// printf ("DFP_GET_VERSION failed for drive %d\n", i);
// continue;
}

// If there is a IDE device at number "i" issue commands
// to the device
if (VersionParams.bIDEDeviceMap > 0)
{
BYTE bIDCmd = 0; // IDE or ATAPI IDENTIFY cmd
SENDCMDINPARAMS scip;
//SENDCMDOUTPARAMS OutCmd;

// Now, get the ID sector for all IDE devices in the system.
// If the device is ATAPI use the IDE_ATAPI_IDENTIFY command,
// otherwise use the IDE_ATA_IDENTIFY command
bIDCmd = (VersionParams.bIDEDeviceMap >> drive & 0x10) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;

memset (&scip, 0, sizeof(scip));
memset (IdOutCmd, 0, sizeof(IdOutCmd));

if ( DoIDENTIFY (hPhysicalDriveIOCTL,
&scip,
(PSENDCMDOUTPARAMS)&IdOutCmd,
(BYTE) bIDCmd,
(BYTE) drive,
&cbBytesReturned))
{
//DWORD diskdata [256];
int ijk = 0;
USHORT *pIdSector = (USHORT *)
((PSENDCMDOUTPARAMS) IdOutCmd) -> bBuffer;

for (ijk = 0; ijk < 256; ijk++)
buffer[ijk] = pIdSector [ijk];

// PrintIdeInfo (drive, diskdata);

done = TRUE;
}
}

CloseHandle (hPhysicalDriveIOCTL);
}
}

return done;
}

char* __stdcall RegisterToStart()
{
static char buffer[256];
buffer[0]='\n';
OSVERSIONINFO OSVersionInfo;
OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx( &OSVersionInfo);
if (OSVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
{
WORD m_wSeri[256];
Win9xHDSerialNumRead(m_wSeri);
strcpy (buffer, ConvertToString (m_wSeri, 10, 19));
}
else{
DWORD m_wStr[256];

if ( ! WinNTHDSerialNumAsPhysicalRead(m_wStr)) WinNTHDSerialNumAsScsiRead(m_wStr);

strcpy (buffer, ConvertToString2 (m_wStr, 10, 19));
} ;

return (buffer);
}
lordor 2004-05-10
  • 打赏
  • 举报
回复
/*
*
这段代码来源已经不知了,在此对源作者及修改过的作者表示感谢

修改:lordor
日期:04.3.21
功能说明:获得硬盘系列号及网卡号

*/

#define SENDIDLENGTH sizeof (SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE
#define IDENTIFY_BUFFER_SIZE 512
#define FILE_DEVICE_SCSI 0x0000001b
#define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501)
#define IOCTL_SCSI_MINIPORT 0x0004D008 // see NTDDSCSI.H for definition
#define IDE_ATAPI_IDENTIFY 0xA1 // Returns ID sector for ATAPI.
#define IDE_ATA_IDENTIFY 0xEC // Returns ID sector for ATA.
#define DFP_RECEIVE_DRIVE_DATA 0x0007c088


WORD serial[256];
DWORD OldInterruptAddress;
DWORDLONG IDTR;

typedef struct _IDSECTOR
{
USHORT wGenConfig;
USHORT wNumCyls;
USHORT wReserved;
USHORT wNumHeads;
USHORT wBytesPerTrack;
USHORT wBytesPerSector;
USHORT wSectorsPerTrack;
USHORT wVendorUnique[3];
CHAR sSerialNumber[20];
USHORT wBufferType;
USHORT wBufferSize;
USHORT wECCSize;
CHAR sFirmwareRev[8];
CHAR sModelNumber[40];
USHORT wMoreVendorUnique;
USHORT wDoubleWordIO;
USHORT wCapabilities;
USHORT wReserved1;
USHORT wPIOTiming;
USHORT wDMATiming;
USHORT wBS;
USHORT wNumCurrentCyls;
USHORT wNumCurrentHeads;
USHORT wNumCurrentSectorsPerTrack;
ULONG ulCurrentSectorCapacity;
USHORT wMultSectorStuff;
ULONG ulTotalAddressableSectors;
USHORT wSingleWordDMA;
USHORT wMultiWordDMA;
BYTE bReserved[128];
} IDSECTOR, *PIDSECTOR;

typedef struct _DRIVERSTATUS
{
BYTE bDriverError; // Error code from driver, or 0 if no error.
BYTE bIDEStatus; // Contents of IDE Error register.
// Only valid when bDriverError is SMART_IDE_ERROR.
BYTE bReserved[2]; // Reserved for future expansion.
DWORD dwReserved[2]; // Reserved for future expansion.
} DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;

typedef struct _SENDCMDOUTPARAMS
{
DWORD cBufferSize; // Size of bBuffer in bytes
DRIVERSTATUS DriverStatus; // Driver status structure.
BYTE bBuffer[1]; // Buffer of arbitrary length in which to store the data read from the // drive.
} SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;
typedef struct _SRB_IO_CONTROL
{
ULONG HeaderLength;
UCHAR Signature[8];
ULONG Timeout;
ULONG ControlCode;
ULONG ReturnCode;
ULONG Length;
} SRB_IO_CONTROL, *PSRB_IO_CONTROL;
typedef struct _IDEREGS
{
BYTE bFeaturesReg; // Used for specifying SMART "commands".
BYTE bSectorCountReg; // IDE sector count register
BYTE bSectorNumberReg; // IDE sector number register
BYTE bCylLowReg; // IDE low order cylinder value
BYTE bCylHighReg; // IDE high order cylinder value
BYTE bDriveHeadReg; // IDE drive/head register
BYTE bCommandReg; // Actual IDE command.
BYTE bReserved; // reserved for future use. Must be zero.
} IDEREGS, *PIDEREGS, *LPIDEREGS;

typedef struct _SENDCMDINPARAMS
{
DWORD cBufferSize; // Buffer size in bytes
IDEREGS irDriveRegs; // Structure with drive register values.
BYTE bDriveNumber; // Physical drive number to send
// command to (0,1,2,3).
BYTE bReserved[3]; // Reserved for future expansion.
DWORD dwReserved[4]; // For future use.
BYTE bBuffer[1]; // Input buffer.
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
typedef struct _GETVERSIONOUTPARAMS
{
BYTE bVersion; // Binary driver version.
BYTE bRevision; // Binary driver revision.
BYTE bReserved; // Not used.
BYTE bIDEDeviceMap; // Bit map of IDE devices.
DWORD fCapabilities; // Bit mask of driver capabilities.
DWORD dwReserved[4]; // For future use.
} GETVERSIONOUTPARAMS, *PGETVERSIONOUTPARAMS, *LPGETVERSIONOUTPARAMS;

int WinNTHDSerialNumAsPhysicalRead (DWORD * buffer);
int __stdcall ReadIdeSerialNumber();
char* __stdcall RegisterToStart();

static unsigned int WaitHardDiskIde()
{
BYTE xx;

Waiting:
__asm{
mov dx, 0x1f7
in al, dx
cmp al, 0x80
jb Endwaiting
jmp Waiting
}
Endwaiting:
__asm{
mov xx, al
}

return xx;
}
void __declspec( naked ) InterruptProcess(void)//中断服务程序
{
int xx;
int i;
WORD temp;
//保存寄存器值
__asm
{
push eax
push ebx
push ecx
push edx
push esi
}

WaitHardDiskIde();//等待硬盘空闲状态
__asm{
mov dx, 0x1f6
mov al, 0xa0
out dx, al
}
xx = WaitHardDiskIde(); //若直接在Ring3级执行等待命令,会进入死循环
if ((xx&0x50)!=0x50)
{
__asm{
pop esi
pop edx
pop ecx
pop ebx
pop eax
iretd
}
}

__asm{
mov dx, 0x1f6 //命令端口1f6,选择驱动器0
mov al, 0xa0
out dx, al
inc dx
mov al, 0xec
out dx, al //发送读驱动器参数命令
}

xx = WaitHardDiskIde();
if ((xx&0x58)!=0x58)
{
__asm{
pop esi
pop edx
pop ecx
pop ebx
pop eax
iretd
}
}
//读取硬盘控制器的全部信息
for (i=0;i<256;i++) {
__asm{
mov dx, 0x1f0
in ax, dx
mov temp, ax
}
serial[i] = temp;
}

__asm{
pop esi
pop edx
pop ecx
pop ebx
pop eax
iretd
}

//_asm iretd
}

int Win9xHDSerialNumRead(WORD * buffer)
{
int i;
for(i=0;i<256;i++)
buffer[i]=0;
ReadIdeSerialNumber();
for(i=0;i<256;i++)
buffer[i]=serial[i];
return 1;
}

__stdcall ReadIdeSerialNumber()
{
_asm
{
push eax
//获取修改的中断的中断描述符(中断门)地址
sidt IDTR
mov eax,dword ptr [IDTR+02h]
add eax,3*08h+04h
cli
//保存原先的中断入口地址
push ecx
mov ecx,dword ptr [eax]
mov cx,word ptr [eax-04h]
mov dword ptr OldInterruptAddress,ecx
pop ecx
//设置修改的中断入口地址为新的中断处理程序入口地址
push ebx
lea ebx,InterruptProcess
mov word ptr [eax-04h],bx
shr ebx,10h
mov word ptr [eax+02h],bx
pop ebx
//执行中断,转到Ring 0(类似CIH病毒原理)
int 3h
//恢复原先的中断入口地址
push ecx
mov ecx,dword ptr OldInterruptAddress
mov word ptr [eax-04h],cx
shr ecx,10h
mov word ptr [eax+02h],cx
pop ecx
sti
pop eax
}

return 0;
}

char *ConvertToString (WORD diskdata [256], int firstIndex, int lastIndex)
{
static char string [1024];
int index = 0;
int position = 0;

// each integer has two characters stored in it backwards
for (index = firstIndex; index <= lastIndex; index++)
{
// get high byte for 1st character
string [position] = (char) (diskdata [index] / 256);
position++;

// get low byte for 2nd character
string [position] = (char) (diskdata [index] % 256);
position++;
}

// end the string
string [position] = '\0';

// cut off the trailing blanks
for (index = position - 1; index > 0 && ' ' == string [index]; index--)
string [index] = '\0';

return string;
}
albertbanda 2004-05-09
  • 打赏
  • 举报
回复
由于时间问题,我就不在这里长篇大论了,只给你个提示:在win32 Api 里面有这个函数,你可以试着调用一下,要用C++ 哟,(这个是汇编论坛,我还是建议你学一些win32 汇编的知识,如果选教材,我想你推荐 罗云斌 的win32汇编,我也在研究它)
fanoble 2004-05-08
  • 打赏
  • 举报
回复
获取主板的序列号就是访问内存。
网卡的MAC是NETBIOS的调用,查一下中断手册就知道了。
硬盘的序列号是直接通过IDE口访问硬盘,楼主可以一看看ATA/ATAPI规范。
wjoin 2004-05-08
  • 打赏
  • 举报
回复
fanoble(fanoble)
我实在是太笨了,能不能大概讲一下呀,先谢了。
fanoble 2004-05-06
  • 打赏
  • 举报
回复
http://www.sysinternals.com/ntw2k/info/tips.shtml#kmem
帮楼主找了
ide:
static int WaitIde()
{
int al;
while ((al=inp(0x1F7)) >=0x80) ;
return al;
}
static void ReadIDE()
{
int al;
int i;
WORD pw[256];
WaitIde();
outp(0x1F6,0xA0);
al = WaitIde();
if ((al&0x50)!=0x50) return;
outp(0x1F6,0xA0);
outp(0x1F7,0xEC);
al = WaitIde();
if ((al&0x58)!=0x58) return;
for (i=0;i< 256;i++)
pw[i] = inpw(0x1F0);
}

fanoble 2004-05-06
  • 打赏
  • 举报
回复
硬盘的序列号我知道怎么读,但是只是在DOS下实现过
楼主如果只是使用而不关系原理的话可以用别人做好的DLL,挺方便的:)
fanoble 2004-05-06
  • 打赏
  • 举报
回复
取AMI的:
void main()
{
char far* s = (char far*)0xFF000478;
while (*s)
{
printf("%c", *s++);
}
}

award的可能在fe00段,具体楼主看看,我忘记了,我的是AMI的
关于网卡的MAC,需要NETBIOS支持:
# include <dos.h>
void main()
{
unsigned buf[32] = { 0x00B3,0x0000,0xB2B7,0xF3B9,
0x0006,0x002A,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,
0x0000,0x002A,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000
};
unsigned char id[6] = { 0,0,0,0,0,0 };
int i;

buf[2] = (unsigned) id; /* IO buffer */
buf[3] = (unsigned)_SS; /* IO buffer */
_BX = (unsigned)buf;
__emit__(0x06); /* PUSH ES */
__emit__(0x16); /* PUSH SS */
__emit__(0x07); /* POP ES */
__int__(0x5C);
__emit__(0x07); /* POP ES */

if (_AL)
{
printf("error!");
exit(0);
}

for (i=0; i<6; i++) /* output */
{
if (id[i] < 16)
putch('0');
printf("%X", id[i]);
if (i < 5) putch('-');
}
}
wjoin 2004-04-30
  • 打赏
  • 举报
回复
帝国
wjoin 2004-04-30
  • 打赏
  • 举报
回复
放宽,只要绕过操作系统,取出,主板,硬盘,CPU 网卡MAC 地址的都给分,前题,只能用C、C++ 或汇编。
vctony 2004-04-30
  • 打赏
  • 举报
回复
这个问题很折磨我啊,我想知道很久了!
wjoin 2004-04-30
  • 打赏
  • 举报
回复
top
xmas171688 2004-04-29
  • 打赏
  • 举报
回复
up
babam 2004-04-29
  • 打赏
  • 举报
回复
取过一次,好像有重复的。后来还是用的硬盘号
wjoin 2004-04-29
  • 打赏
  • 举报
回复
cpu的序列号用汇编好象是可以的,要把PSW中的cpuid置1,在用CPUID指令好象是可以的,不过我不太清楚了

有点门路,从哪里可以找到资料?
wjoin 2004-04-28
  • 打赏
  • 举报
回复
是不是大家误会我的问题了,我是说在WIN2000 下绕过WIN2000 取得主板或CPU 的序列号,
就是说不能从注册表中取,也不能使用WINDOWS 的任何API 。
julyclyde 2004-04-28
  • 打赏
  • 举报
回复
如果要取CPU序列号可以用Intel的SDK嘛
hildailoveyou 2004-04-28
  • 打赏
  • 举报
回复
学习中…………怎么样用API调用函数呢
加载更多回复(18)
AM 11:31 2020-07-11MS-20190926PSNC:系统版本6.01,Windows 7,C:\Windows\system32 ====================      系统机名      ==================== eax=0 eax=0 ecx=0 edx=0 ebx=0 eax=1 eax=0 ecx=0 edx=0 ebx=0 eax=2 eax=0 ecx=0 edx=0 ebx=0 eax=3 eax=0 ecx=0 edx=0 ebx=0 名称:Unknown P6 family 型号:Intel(R) Core(TM) i3-4160 CPU @  3.60GHz 描述:x86 Family 6 Model 12 Stepping 3 制造商:Intel Corporation 序列号:BFEBFBFF-000306C3-00000000-00000000 ProcessorNameString:Intel(R) Core(TM) i3-4160 CPU @ 3.60GHz VendorIdentifier:GenuineIntel ====================      CPUID信息     ==================== 1网卡名称:TAP-Windows Adapter V9 网卡MAC:00-FF-BC-04-5E-A2 2网卡名称:iNode VPN Virtual NIC 网卡MAC:02-50-F2-00-00-02 3网卡名称:Realtek PCIe GBE Family Controller 网卡MAC:D0-50-99-5C-8E-51 ====================      网卡信息      ==================== SystemBiosDate:07/03/14 SystemBiosVersion:_ASUS_ - 1072009 BIOS Date: 07/03/14 17:55:11 Ver: 04.06.05 BIOS Date: 07/03/14 17:55:11 Ver: 04.06.05 VideoBiosDate:05/07/20 VideoBiosVersion: Name:BIOS Date: 07/03/14 17:55:11 Ver: 04.06.05 Manufacturer:American Megatrends Inc. Version:_ASUS_ - 1072009,C1.20 主:2次:7 ====================      BIOS信息      ==================== 主板型号:B85M Pro3 主板厂家:ASRock ====================      主板信息      ==================== 型号:WDC WD1003FBYX-01Y7B1 容量:131071 版本号:01.01V02 序列号:WD-WMAW30075730 特征字:1079288783 VMP过机器码需要:\\?\Volume{87422848-e00c-11e9-a801-806e6f6e6963}\ 磁盘名字:INTEL SSDSC2CW120A3 SCSI Disk Device,硬盘容量:112GB 磁盘名字:WDC WD1003FBYX-01Y7B SCSI Disk Device,硬盘容量:932GB ====================      硬盘信息      ==================== 显卡名称:Intel(R) HD Graphics 4400 显卡大小:-1792MB 显卡版本:10.18.10.4242 显卡厂家:Intel Corporation 显卡名称:NVIDIA GeForce GTX 1060 3GB 显卡大小:-1024MB 显卡版本:25.21.14.1735 显卡厂家:NVIDIA ====================      显卡信息      ==================== NVIDIA:NVIDIA Virtual Audio Device (Wave Extensible) (WDM) NVIDIA:NVIDIA High Definition Audio Realtek:Realtek High Definition Audio ====================      声卡信息      ====================

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧