导航:首页 > 编程语言 > wvt文件编程

wvt文件编程

发布时间:2023-01-14 04:43:05

⑴ 什么是驱动软件

  1. 驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。

  2. 驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。另外,不同版本的操作系统对硬件设备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多。

  3. 设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。

  4. 所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。操作系统不同,硬件的驱动程序也不同,各个硬件厂商为了保证硬件的兼容性及增强硬件的功能会不断地升级驱动程序。如:Nvidia显卡芯片公司平均每个月会升级显卡驱动程序2-3次。驱动程序是硬件的一部分,当安装新硬件时,驱动程序是一项不可或缺的重要元件。凡是安装一个原本不属于电脑中的硬件设备时,系统就会要求安装驱动程序,将新的硬件与电脑系统连接起来。驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作。

  5. 驱动程序可以界定为官方正式版、微软WHQL认证版、第三方驱动、发烧友修改版、Beta测试版。

    更多请参考:http://ke..com/link?url=QMwlS3U3IGbX9ZgYK_3Wg3CkwAET7A--hrhjIpqlmXSZARq


⑵ C语言实训

/*8、学生成绩管理系统
学生属性:学号,姓名,入学年月,有成绩的学期数,四门课的成绩等9个成员,
在编程中要求当执行状态输入i为输入学生记录,输入D为删除,输入s为查询(以学号为查询条件,输入p为将整个学生记录输出,使用结构数组或结构指针编程)
*/
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"

int stu_num=0; //全局变量,已输入成绩的学生人数

struct student //结构体数组,用于储存学生的数据
{
char num[11]; //储存学号
char name[11]; //储存名字
char sex[3]; //储存性别
char date[11]; //储存入学年月
int term; //储存学期数
float score1; //储存成绩1
float score2; //储存成绩2
float score3; //储存成绩3
float score4; //储存成绩4
}student[100];

void warning() //警告函数
{
char a;
printf("您所查找的学生暂无数据,按任意键返回重新输入");
a=getch(); //储存任意键
}

void input() //输入函数
{
char a;
do
{
system("cls");
printf("(i)输入学生数据\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='i'||a=='I') //输入学生数据
{
system("cls"); //清屏函数
printf("下面输入第%d个学生的数据\n学号:",stu_num+1); //以下操作储存学生数据于结构体中
scanf("%s",&student[stu_num].num);
printf("姓名:");
scanf("%s",&student[stu_num].name);
printf("性别:");
scanf("%s",&student[stu_num].sex);
printf("入学年月:");
scanf("%s",&student[stu_num].date);
printf("学期:");
scanf("%d",&student[stu_num].term);
printf("成绩1:");
scanf("%f",&student[stu_num].score1);
printf("成绩2:");
scanf("%f",&student[stu_num].score2);
printf("成绩3:");
scanf("%f",&student[stu_num].score3);
printf("成绩4:");
scanf("%f",&student[stu_num].score4);
stu_num++;
}
if(a=='e'||a=='E') //退出输入函数
{
break; //强制结束循环以退出输入函数
}
}while(1);
}

void output() //输出函数
{
system("cls"); //清屏函数
int i,j;
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
for(i=0;i<stu_num;i++) //通过for语句逐个输出学生数据
{
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
}
printf("按任意键返回主菜单");
j=getch(); //储存任意键
}

void revise() //修改函数
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找修改\n(m)按名字查找修改\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出修改函数
{
return;
}
else //为了防止选错选项
{
goto st;
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
system("cls");
printf("您要更改的学生的信息为:\n"); //输出欲修改的学生信息
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("请更新该学生的数据\n学号:"); //找到后进行数据更新
scanf("%s",&student[i].num);
printf("姓名:");
scanf("%s",&student[i].name);
printf("性别:");
scanf("%s",&student[i].sex);
printf("入学年月:");
scanf("%s",&student[i].date);
printf("学期:");
scanf("%d",&student[i].term);
printf("成绩1:");
scanf("%f",&student[i].score1);
printf("成绩2:");
scanf("%f",&student[i].score2);
printf("成绩3:");
scanf("%f",&student[i].score3);
printf("成绩4:");
scanf("%f",&student[i].score4);
printf("该学生数据已修改,按任意键返回");
a=getch(); //储存任意键
}

void search() //查询函数
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找\n(m)按名字查找\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出查询函数
{
return;
}
else //为了防止选错选项
{
goto st;
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("按任意键返回主菜单");
a=getch();
}

void del() //删除函数
{
int i=0,j;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找删除\n(m)按名字查找删除\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
{
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到后结束循环
}
}
}
else if(a=='e'||a=='E') //退出删除函数
{
return;
}
else
{
goto st; //为了防止选错选项
}
if(i==stu_num) //未找到学生数据时提示警告并重新查找
{
warning();
goto st;
}
for(j=i;j<stu_num;j++) //通过for语句进行数据覆盖实现删除学生数据
{
student[j]=student[j+1];
}
stu_num-=1;
printf("该学生数据已删除,按任意键返回主菜单");
a=getch();
}

void menu() //目录函数
{
do
{
char a;
st: system("cls"); //清屏函数
printf("\t\t 欢迎使用学生成绩管理系统 1.22版\n\n\n\t\t\t(i)输入学生数据\n\n\t\t\t(d)删除学生数据\n\n\t\t\t(o)查看学生数据\n\n\t\t\t(s)查询学生数据\n\n\t\t\t(r)修改学生数据\n\n\t\t\t(e)退出系统\n\n\n请输入您要执行的选项:"); //主菜单
a=getch(); //获取输入选项
switch(a)
{
case 'i': //进入输入函数
case 'I':
input();
break;
case 'o': //进入输出函数
case 'O':
output();
break;
case 'r': //进入修改函数
case 'R':
revise();
break;
case 'd': //进入删除函数
case 'D':
del();
break;
case 's': //进入查找函数
case 'S':
search();
break;
case 'e': //退出程序
case 'E':
return;
default: //为了防止选错选项
goto st;
}
}while(1);

}

void main()
{
printf("组员:\n李东海 陈志锐\n凌华富 林继其\n杜德伟 钟鹏珲\n\n\n\n\t\t请稍后……"); //鸣谢栏
Sleep(7000);
menu();
}

这个是我们几个人做的期末作业,你可以拿去参考;如果windows函数不能用,就把他删除掉还有sleep这个也一起删除掉。

⑶ C#如何验证一个PE文件的数字签名是否正确

和网上大量的讨论如何制作数字签名和验证数字签名的文章本同,本文使用微软自带的API进行PE文件数字签名有效性的验证,使用语言C#。
我们可以在windows系统下直接右键查看某个PE文件数字签名的有效性,如下图:
这让我们想到,微软必然自带了对PE文件数字签名的验证办法,经过查找资料,确定其来自下图所示的dll文件里的WinVerifyTrust函数。
该函数在C#里的调用原型如下:
C#

[DllImport("wintrust.dll", PreserveSig = true, SetLastError = false)]
private static extern uint WinVerifyTrust(IntPtr hWnd, IntPtr pgActionID, IntPtr pWinTrustData);

关于这个函数的使用,可以查看MSDN上的说明 。
(2) 构建将要用到的数据结构
根据微软官方材料,我们在使用这个函数前还得先准备几个数据结构:

using System;
using System.Runtime.InteropServices;

namespace VerifyDigitalSignature
{
public enum AllocMethod
{
HGlobal,
CoTaskMem
}

public enum UnionChoice
{
File = 1,
Catalog,
Blob,
Signer,
Cert
}

public enum UiChoice
{
All = 1,
NoUI,
NoBad,
NoGood
}

public enum RevocationCheckFlags
{
None = 0,
WholeChain
}

public enum StateAction
{
Ignore = 0,
Verify,
Close,
AutoCache,
AutoCacheFlush
}

public enum TrustProviderFlags
{
UseIE4Trust = 1,
NoIE4Chain = 2,
NoPolicyUsage = 4,
RevocationCheckNone = 16,
RevocationCheckEndCert = 32,
RevocationCheckChain = 64,
= 128,
Safer = 256,
HashOnly = 512,
UseDefaultOSVerCheck = 1024,
LifetimeSigning = 2048
}

public enum UIContext
{
Execute = 0,
Install
}

#region UnmanagedPointer class

internal sealed class UnmanagedPointer : IDisposable
{
private IntPtr m_ptr;
private AllocMethod m_meth;

internal UnmanagedPointer( IntPtr ptr, AllocMethod method )
{
m_meth = method;
m_ptr = ptr;
}

~UnmanagedPointer()
{
Dispose( false );
}

#region IDisposable Members

private void Dispose( bool disposing )
{
if ( m_ptr != IntPtr.Zero )
{
if ( m_meth == AllocMethod.HGlobal )
{
Marshal.FreeHGlobal( m_ptr );
}
else if ( m_meth == AllocMethod.CoTaskMem )
{
Marshal.FreeCoTaskMem( m_ptr );
}

m_ptr = IntPtr.Zero;
}

if ( disposing )
{
GC.SuppressFinalize( this );
}
}

public void Dispose()
{
Dispose( true );
}

#endregion

public static implicit operator IntPtr( UnmanagedPointer ptr )
{
return ptr.m_ptr;
}
}

#endregion

internal struct WINTRUST_FILE_INFO : IDisposable
{
public WINTRUST_FILE_INFO( string fileName, Guid subject )
{
cbStruct = (uint)Marshal.SizeOf( typeof( WINTRUST_FILE_INFO ) );
pcwszFilePath = fileName;

if ( subject != Guid.Empty )
{
pgKnownSubject = Marshal.AllocHGlobal( Marshal.SizeOf( typeof( Guid ) ) );
Marshal.StructureToPtr( subject, pgKnownSubject, true );
}
else
{
pgKnownSubject = IntPtr.Zero;
}

hFile = IntPtr.Zero;
}

public uint cbStruct;
[MarshalAs( UnmanagedType.LPTStr )]
public string pcwszFilePath;
public IntPtr hFile;
public IntPtr pgKnownSubject;

#region IDisposable Members

public void Dispose()
{
Dispose( true );
}

private void Dispose( bool disposing )
{
if ( pgKnownSubject != IntPtr.Zero )
{
Marshal.DestroyStructure( this.pgKnownSubject, typeof( Guid ) );
Marshal.FreeHGlobal( this.pgKnownSubject );
}
}

#endregion
}

[StructLayout( LayoutKind.Sequential )]
internal struct WINTRUST_DATA : IDisposable
{
public WINTRUST_DATA( WINTRUST_FILE_INFO fileInfo )
{
this.cbStruct = (uint)Marshal.SizeOf( typeof( WINTRUST_DATA ) );
pInfoStruct = Marshal.AllocHGlobal( Marshal.SizeOf( typeof( WINTRUST_FILE_INFO ) ) );
Marshal.StructureToPtr( fileInfo, pInfoStruct, true );
this.dwUnionChoice = UnionChoice.File;

pPolicyCallbackData = IntPtr.Zero;
pSIPCallbackData = IntPtr.Zero;

dwUIChoice = UiChoice.NoUI;
fdwRevocationChecks = RevocationCheckFlags.None;
dwStateAction = StateAction.Ignore;
hWVTStateData = IntPtr.Zero;
pwszURLReference = IntPtr.Zero;
dwProvFlags = TrustProviderFlags.Safer;

dwUIContext = UIContext.Execute;
}

public uint cbStruct;
public IntPtr pPolicyCallbackData;
public IntPtr pSIPCallbackData;
public UiChoice dwUIChoice;
public RevocationCheckFlags fdwRevocationChecks;
public UnionChoice dwUnionChoice;
public IntPtr pInfoStruct;
public StateAction dwStateAction;
public IntPtr hWVTStateData;
private IntPtr pwszURLReference;
public TrustProviderFlags dwProvFlags;
public UIContext dwUIContext;

#region IDisposable Members

public void Dispose()
{
Dispose( true );
}

private void Dispose( bool disposing )
{
if ( dwUnionChoice == UnionChoice.File )
{
//WINTRUST_FILE_INFO info = new WINTRUST_FILE_INFO();
//Marshal.PtrToStructure(pInfoStruct, info);
//info.Dispose();
Marshal.DestroyStructure( pInfoStruct, typeof( WINTRUST_FILE_INFO ) );
}

Marshal.FreeHGlobal( pInfoStruct );
}

#endregion
}
}

(3)构建我们的验证类
Shell
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace VerifyDigitalSignature
{
public class Authentication
{
[DllImport( "wintrust.dll", PreserveSig = true, SetLastError = false )]
private static extern uint WinVerifyTrust( IntPtr hWnd, IntPtr pgActionID, IntPtr pWinTrustData );

private static List<Guid> GetTrustGuid()
{
//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Providers\Trust\Initialization\
List<Guid> trustGuids = new List<Guid>();
RegistryKey hklm = Registry.LocalMachine;
RegistryKey initialization = hklm.OpenSubKey( @"SOFTWARE\Microsoft\Cryptography\Providers\Trust\Initialization" );
string[] guidNames = initialization.GetSubKeyNames();

foreach ( string guidName in guidNames )
{
trustGuids.Add( new Guid( guidName ) );
}

return trustGuids;
}

public static uint CSWinVerifyTrust( string fileName )
{
uint result = 1516356;

try
{
List<Guid> trustGuids = GetTrustGuid();

foreach ( Guid guid in trustGuids )
{
Guid wintrust_action_generic_verify_v2 = guid;

WINTRUST_FILE_INFO fileInfo = new WINTRUST_FILE_INFO( fileName, Guid.Empty );
WINTRUST_DATA data = new WINTRUST_DATA( fileInfo );
UnmanagedPointer guidPtr = new UnmanagedPointer( Marshal.AllocHGlobal( Marshal.SizeOf( typeof( Guid ) ) ), AllocMethod.HGlobal );
UnmanagedPointer wvtDataPtr = new UnmanagedPointer( Marshal.AllocHGlobal( Marshal.SizeOf( typeof( WINTRUST_DATA ) ) ), AllocMethod.HGlobal );

IntPtr pGuid = guidPtr;
IntPtr pData = wvtDataPtr;

Marshal.StructureToPtr( wintrust_action_generic_verify_v2, pGuid, true );
Marshal.StructureToPtr( data, pData, true );

result = WinVerifyTrust( IntPtr.Zero, pGuid, pData );

if ( result == 0 )
{
break;
}
}
}
catch ( Exception ex )
{
throw new Exception( "VerifyDigitalSignature error.", ex );
}

return result;
}
}
}

注意这里,WinVerifyTrust的返回值有多种,0表示数字签名各项指标都是正常的,其他代码我们下一部分再来讨论。

⑷ auto病毒是什么病毒呀,详细点最后哦

AUTO病毒(auto专杀):AUTO病毒。该病毒的主要症状:除系统盘外,其它盘鼠标左键双击打不开,右键单击打开菜单会出现一个OPEN的选项。每个盘都有两个这样的文件:autorun.inf 和 sxs.exe,当然可能有些人并不是sxs.exe,而是以其它命名的*.exe的文件。
该病毒是rose病毒的变种, rose病毒症状:双击盘符无法打开,只能通过右键打开;几天之后删除系统NTDETECT.COM文件,导致系统无法启动。
传播途径:U盘、MP3、移动硬盘可见,此毒不除,电脑玩完。一般的杀毒软件基本只能查出来,但是都杀不了。

网上也讲了许多方法,其中有两种方法比较普遍:注册表法和专杀工具法。注册表法由于过于复杂,所以建议对注册表知之甚少的朋友少用,搞不好毒杀不掉,反倒把自己的系统搞跨,实在不值得。当然就还有另外了一种方法专杀工具法,去网上找一个专杀工具,就可将其彻底杀掉。

现在网上主要的专杀工具有两个:RavMonE Killer和江民的落雪专杀TrojanKiller。

下载地址:AUTO专杀工具RavMonE Killer

下载专杀工具.杀完之后,再重启电脑,打开我的电脑,选中硬盘盘符,点右键选择”打开“(千万不能双击打开,否则木马又会进行复制),"工具"-"文件夹选项"-"查看"-"显示所有隐藏文件"让隐藏文件显示,找到该盘下的RavMonE.exe文件,autorun.inf文件,超级文本以fot开头的文件,全部删除.在确定没有上述文件后,退出U盘,再插入检查是否有"Auto“,如果没有,则删除成功.

下载地址:江民落雪专杀TrojanKiller

( 告诉大家比较简单的用法 例如 你用的是 江民落雪专杀TrojanKiller 先下载,杀过之后再右击重命名各个盘,就应该OK啦!!!
Auto病毒查杀(注册表法)

现象:U盘无法打开,而且用传统的删除inf文件的方法也不行!

解决手段:
1、打开任务管理器(ctrl+alt+del或者任务栏右键点击也可),终止所有ravmone.exe的进程

2、进入c:\windows,删除其中的ravmone.exe

3、进入c:\windows,运行regedit.exe,在左边依次点开HK_Loacal_Machine\software\Microsoft\windows\CurrentVersion\Run\,在右边可以看到一项数值是c:\windows\ravmone.exe的,把他删除掉

4、完成后,病毒就被清除了。

对移动存储设备,如果中毒,则把文件夹选项中隐藏受保护的操作系统文件钩掉,点上显示所有文件和文件夹,点击确定,然后在移动存储设备中会看到如下几个文件,autorun.inf,msvcr71.dl,ravmone.exe,都删除掉,还有一个后缀为tmp的文件,也可以删除,完成后,病毒就清除了。

至此为止,您机器上的“木马”就算完全解除了.

现在是您的移动设施,首先你您的移动设施拔出,再插入(这个步骤不能少).在我的电脑中该盘符上按住鼠标右键.检查第一个选项是否为"Auto“,如果是,那就是该盘已中马,如果不是,可以放心双击使用,如果为"Auto“了,目前有两种解决方法:

1,格式化该移动设施,该法删除比较彻底,适合文件不多、空间不大的移动设施,格式化后,问题完全解决

2,点右键选择”打开“(千万不能双击打开,否则木马又会进行复制),找到该盘下的ravmonE.exe文件,autorun文件,超级文本以fot开头的文件,全部删除(autorun、超级文本以fot为隐藏,可以在我的电脑窗口最上端-工具-文件夹选项-查看-显示所有隐藏文件让它显示),在确定没有上述文件后,退出U盘,再插入检查是否有"Auto“,如果没有,则删除成功.

总结一下: 1、避免中此种木马只需在开启移动设施的时候右键-打开进入即可,这样拷贝或打开盘内文件均不会被感染,木马的传播方式是“双击该盘盘符”。

2、通过观察是否有"Auto“判断该盘是否中过此类木马,再通过"Auto“解决方案进行处理uto病毒专杀软件

阅读全文

与wvt文件编程相关的资料

热点内容
扣扣加密技巧 浏览:720
苹果如何创建服务器错误 浏览:495
软考初级程序员大题分值 浏览:473
js压缩视频文件 浏览:578
linux如何通过命令创建文件 浏览:989
应用加密app还能访问应用嘛 浏览:433
安卓怎么用支付宝交违章罚款 浏览:665
php面向对象的程序设计 浏览:504
数据挖掘算法书籍推荐 浏览:894
投诉联通用什么app 浏览:150
web服务器变更ip地址 浏览:954
java正则表达式验证邮箱 浏览:360
成熟商务男装下载什么软件app 浏览:609
加密2h代表长度是多少厘米 浏览:23
拍卖程序员 浏览:102
电脑的图片放在哪个文件夹 浏览:276
unsignedintjava 浏览:217
编译器下载地址 浏览:43
什么是面对对象编程 浏览:709
b站服务器什么时候恢复 浏览:722