⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpok.cpp

📁 YSS915 (KP2V2) is an LSI for processing Karaoke voice signals. This LSI has an A/D converter (1 cha
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	// Exclude rarely-used stuff from Windows headers

#include <iostream.h>
#include "windows.h"
#include "stdio.h"
#include "stdlib.h"

//#pragma comment(lib, "advapi32") 



#define NTAPI       __stdcall 
typedef int NTSTATUS; 

//swsw--------------------------------------


//----------------------------------------------
typedef enum _SYSDBG_COMMAND 
{ 
  SysDbgSysReadIoSpace = 14, 
  SysDbgSysWriteIoSpace = 15 
}SYSDBG_COMMAND, *PSYSDBG_COMMAND; 

typedef NTSTATUS (NTAPI * PZwSystemDebugControl) ( 
    SYSDBG_COMMAND ControlCode, 
    PVOID InputBuffer, 
    ULONG InputBufferLength, 
    PVOID OutputBuffer, 
    ULONG OutputBufferLength, 
    PULONG ReturnLength 
    ); 

PZwSystemDebugControl ZwSystemDebugControl = NULL; 

typedef struct _IO_STRUCT 
{ 
    DWORD IoAddr;       // IN: Aligned to NumBYTEs,I/O address 
    DWORD Reserved1;    // Never accessed by the kernel 
    PVOID pBuffer;      // IN (write) or OUT (read): Ptr to buffer 
    DWORD NumBYTEs;     // IN: # BYTEs to read/write. Only use 1, 2, or 4. 
    DWORD Reserved4;    // Must be 1 
    DWORD Reserved5;    // Must be 0 
    DWORD Reserved6;    // Must be 1 
    DWORD Reserved7;    // Never accessed by the kernel 
} IO_STRUCT, *PIO_STRUCT; 

/*=============================================*/
//#pragma pack(1)
typedef struct _IDSECTOR {
    unsigned short wGenConfig;       //0 一般信息
    unsigned short wNumCyls;         //1 圆柱体的数目
    unsigned short wReserved;        //2 保留
    unsigned short wNumHeads;        //3 磁头的数目
    unsigned short wBytesPerTrack;   //4 隐退的
    unsigned short wBytesPerSector;  //5 隐退的
    unsigned short wSectorsPerTrack; //6 逻辑扇区的数目
    unsigned short wVendorUnique[3]; //  7 8 为指定协会保留?  9隐退的
    unsigned char  sSerialNumber[10];  //10---19  序号 (20个 ASCII 字符)
    unsigned short wBufferType;      //20 隐退的
    unsigned short wBufferSize;      //21 隐退的
    unsigned short wECCSize;         //22 废除
    unsigned char  sFirmwareRev[8];    //23---26 框架校订 (8个 ASCII 字符)
    unsigned char  sModelNumber[40];   //27---46 模型数 (40个 ASCII 字符)
    unsigned short wMoreVendorUnique;//47
    unsigned short wDoubleWordIO;    //48
    unsigned short wCapabilities;    //49
    unsigned short wReserved1;       //50
    unsigned short wPIOTiming;       //51
    unsigned short wDMATiming;       //52
    unsigned short wBS;              //53
    unsigned short wNumCurrentCyls;  //54  目前圆柱体的数目
    unsigned short wNumCurrentHeads; //55  目前磁头的数目
    unsigned short wNumCurrentSectorsPerTrack;//56      目前每轨道扇区的数目
    unsigned short ulCurrentSector[2];            //57--58  目前扇区的总数目
    unsigned short wMultSectorStuff;          //59
    unsigned short  leSectors[2];                 //60--61  使用者可设定位址的扇区总数 (只有 LBA 模态)
    unsigned short wSingleWordDMA;            //62
    unsigned short wMultiWordDMA;             //63
	unsigned short PIO; //64  高阶 PIO 模态支援  
	unsigned short sw1; //65   
	unsigned short sw2; //66
	unsigned short sw3; //67
	unsigned short sw4; //68
	unsigned short sw5[2]; //69--70 保留 (对于未来指令重叠和排队)
	unsigned short sw6[4]; //71--74 为认明小包装置指令保留。
    unsigned short sw7;    //75     储列深度
    unsigned short sw8[4]; //76--79 保留
    unsigned short sw9;    //80     主修版号  0000 h 或 FFFFh 不报告版号
	         /*    15 沉默寡言的
                   14 为 ATA/ATAPI-14 保留
                   13 为 ATA/ATAPI-13 保留
                   12 为 ATA/ATAPI-12 保留
                   11 为 ATA/ATAPI-11 保留
                   10 为 ATA/ATAPI-10 保留
                    9 为 ATA/ATAPI-9 保留
                    8 为 ATA/ATAPI-8 保留
                    7 为 ATA/ATAPI-7 保留
                    6 为 ATA/ATAPI-6 保留
                    5 1= 支援 ATA/ATAPI-5
                    4 1= 支援 ATA/ATAPI-4
                    3 1= 支援 ATA-3
                    2 1= 支援 ATA-2
                    1 废语
                    0 保留*/
    unsigned short sw10; //81   较小的版号0000 h 或 FFFFh=不报告版本
    unsigned short sw11; //82   指令支援。
    unsigned short sw12; //83   指令支援。
    unsigned short sw13; //84   固定的指令/ 功能扩充。
    unsigned short sw14; //85   固定的指令/ 功能扩充。
    unsigned short sw15; //86   固定的指令/ 功能扩充。
    unsigned short sw16; //87   固定的指令/ 功能扩充。
    unsigned short sw17; //88   Ultra DMA
    unsigned short sw18; //89   安全[性] 所需的时间抹掉单位完成
    unsigned short sw19; //90   可提高的安全[性] 所需的时间抹掉完成
    unsigned short sw20; //91   能力管理数值
    unsigned short sw21[35]; //92 -- 126  保留
    unsigned short sw22;     //127        设定的可移动的介质状态通知功能支援
    unsigned short sw23;     //128        安全 状态
	                 /*
						15-9 保留
						8    安全层次 0= 高度,1= 最大值
						7-6  保留
						5   可提高的 1= 安全抹掉支援
						4   1= 安全[性] 计数期满
						3   1= 冻结的安全[性]
						2   1= 安全 锁
						1   1= 安全 激活
						0   1= 安全 支援
					*/
     unsigned short bReserved[127];
} IDSECTOR, *PIDSECTOR;

/*==========================================*/


BOOL EnablePrivilege (PCSTR name) 
{ 
    HANDLE hToken; 
    BOOL rv; 
     
    TOKEN_PRIVILEGES priv = { 1, {0, 0, SE_PRIVILEGE_ENABLED} }; 
	//查巡特权变量价值
    LookupPrivilegeValue ( 
        0, 
        name, 
        &priv.Privileges[0].Luid 
    ); 
     //打开进程权标
    OpenProcessToken( 
		/*得到现在的进程*/
        GetCurrentProcess (), 
        TOKEN_ADJUST_PRIVILEGES, 
        &hToken 
    ); 
     //调整权标特权
    AdjustTokenPrivileges ( 
        hToken, 
        FALSE, 
        &priv, 
        sizeof priv, 
        0, 
        0 
    ); 
    rv = GetLastError () == ERROR_SUCCESS; 
     
    CloseHandle (hToken); 
    return rv; 
}

BYTE InPortB (int Port)
{
    BYTE Value;
    IO_STRUCT io;
    
    io.IoAddr = Port;
    io.Reserved1 = 0;
    io.pBuffer = (PVOID) (PULONG) & Value;
    io.NumBYTEs = sizeof (BYTE);
    io.Reserved4 = 1;
    io.Reserved5 = 0;
    io.Reserved6 = 1;
    io.Reserved7 = 0;
    
    ZwSystemDebugControl 
    (
        SysDbgSysReadIoSpace,
          &io,
          sizeof (io),
          NULL,
          0,
          NULL
    );
    return Value;
}


WORD InPortW (int Port)
{
    WORD Value;
    IO_STRUCT io;
    
    io.IoAddr = Port;
    io.Reserved1 = 0;
    io.pBuffer = (PVOID) (PULONG) & Value;
    io.NumBYTEs = sizeof (WORD);
    io.Reserved4 = 1;
    io.Reserved5 = 0;
    io.Reserved6 = 1;
    io.Reserved7 = 0;
    
    ZwSystemDebugControl 
    (
        SysDbgSysReadIoSpace,
          &io,
          sizeof (io),
          NULL,
          0,
          NULL
    );
    return Value;
}


void OutPortB (int Port, BYTE Value)
{
    IO_STRUCT io;
    
    io.IoAddr = Port;
    io.Reserved1 = 0;
    io.pBuffer = (PVOID) (PULONG) & Value;
    io.NumBYTEs = sizeof (BYTE);
    io.Reserved4 = 1;
    io.Reserved5 = 0;
    io.Reserved6 = 1;
    io.Reserved7 = 0;
    
    ZwSystemDebugControl 
    (
        SysDbgSysWriteIoSpace,
        &io,
        sizeof (io),
        NULL,
        0,
        NULL
    );
}

void OutPortW (int Port, WORD Value)
{
    IO_STRUCT io;
    
    io.IoAddr = Port;
    io.Reserved1 = 0;
    io.pBuffer = (PVOID) (PULONG) & Value;
    io.NumBYTEs = sizeof (WORD);
    io.Reserved4 = 1;
    io.Reserved5 = 0;
    io.Reserved6 = 1;
    io.Reserved7 = 0;
    
    ZwSystemDebugControl 
    (
        SysDbgSysWriteIoSpace,
        &io,
        sizeof (io),
        NULL,
        0,
        NULL
    );
}


void ChangeByteOrder(unsigned char * szString, unsigned short uscStrSize)
{
    unsigned short i;
    CHAR temp;
    for (i = 0; i < uscStrSize; i+=2)
    {
        temp = szString[i];
        szString[i] = szString[i+1];
        szString[i+1] = temp;
    }
}

void PrintIdeInfo (WORD diskdata [256])
{
	unsigned char s[41];
	memcpy(s,(char *)&diskdata[27],40);
    ChangeByteOrder(s,40);
	s[40]=0;
	cout<<endl<<"Module Number:  "<<s<<endl;
	memcpy(s,(char *)&diskdata[23],8);
    ChangeByteOrder(s,8);
	s[8]=0;
	cout<<"Firmware rev :  "<<s<<endl;
	memcpy(s,(char *)&diskdata[10],20);
    ChangeByteOrder(s,20);
	s[20]=0;
	cout<<"Serial Number:  "<<s<<endl;
	unsigned long pp=diskdata[60];//s[0];
	unsigned long pp1=diskdata[61]<<16;
	pp=pp|pp1;
	cout<<"最大容量     :  "<<pp/2/1000<<"M"<<endl<<endl;
	printf("安全         :%04X  \n",diskdata[128]);
    printf("ATAI版本     :%04X  \n\n\n",diskdata[80]);
    printf("指令组支持82 :%04X  \n",diskdata[82]);
	if((diskdata[82]&0x0002)==0x0002)
       printf("指令支持     :  支持安全模态功能组指令\n");
	else  
	   printf("指令支持     :  不支持安全模态功能组指令\n");
	if((diskdata[82]&0x0400)==0x0400)
       printf("指令支持     :  支援保护主机被设定的区域的功能\n\n");
	else  
	   printf("指令支持     :  不支援保护主机被设定的区域的功能\n\n");
    printf("指令组支持83  :%04X\n",diskdata[83]);//固定的指令/ 功能能够。
	if((diskdata[83]&0x0100)==0x0100)
       printf("指令支持     :  支援扩充的安全设定最大指令\n\n");
	else 
       printf("指令支持     :  不支援扩充的安全设定最大指令\n\n");
    printf("固定指令/ 功能激活85    :%04X\n",diskdata[85]);
	if((diskdata[86]&0x0002)==0x0002)
       printf("指令支持     :  设定的安全模态功能激活\n\n");
    else
       printf("指令支持     :  设定的安全模态功能没有激活\n\n");

    printf("固定指令/ 功能激活86    :%04X\n",diskdata[86]);
	if((diskdata[86]&0x0100)==0x0100)
       printf("指令支持     :  SET MAX SET PASSWORD激活\n\n");
    else
       printf("指令支持     :  SET MAX SET PASSWORD没有激活\n\n");

    printf("管理员口令 校订码92    :%04X\n",diskdata[92]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -