小编use*_*902的帖子

C#P /调用Win32函数RegQueryInfoKey

我正在尝试移植以下C ++代码:

BOOL SyskeyGetClassBytes(HKEY hKeyReg,LPSTR keyName,LPSTR valueName,LPBYTE classBytes) {
HKEY hKey,hSubKey;
DWORD dwDisposition=0,classSize;
BYTE classStr[16];
LONG ret;
BOOL isSuccess = FALSE;

ret = RegCreateKeyEx(hKeyReg,keyName,0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE,NULL,&hKey,&dwDisposition);

if(ret!=ERROR_SUCCESS) 
    return FALSE;
else if(dwDisposition!=REG_OPENED_EXISTING_KEY) {
    RegCloseKey(hKey);
    return FALSE;
}
else {
    if(RegOpenKeyEx(hKey,valueName,0,KEY_READ,&hSubKey)==ERROR_SUCCESS) {
        classSize = 8+1;
        ret = RegQueryInfoKey(hSubKey,(LPTSTR)classStr,&classSize,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
        if((ret==ERROR_SUCCESS)&&(classSize==8)) {
            classBytes[0]= (HexDigitToByte(classStr[0]) << 4) | HexDigitToByte(classStr[1]);
            classBytes[1]= (HexDigitToByte(classStr[2]) << 4) | HexDigitToByte(classStr[3]);
            classBytes[2]= (HexDigitToByte(classStr[4]) << 4) | HexDigitToByte(classStr[5]);
            classBytes[3]= (HexDigitToByte(classStr[6]) << 4) | HexDigitToByte(classStr[7]);
            isSuccess = TRUE;
        }
        RegCloseKey(hSubKey);
    }
    RegCloseKey(hKey);
}

return isSuccess; …
Run Code Online (Sandbox Code Playgroud)

c# registry pinvoke winapi

5
推荐指数
1
解决办法
2662
查看次数

如何从x86中的中断处理程序获取中断号?

在x86上以保护模式触发中断时,是否可以找出触发的中断号?例如,假设我调用了int 0xFF.在处理程序中我可以找到int 0xFF被调用?

x86 assembly interrupt irq

3
推荐指数
1
解决办法
1647
查看次数

如何在C中返回void*指针?

基本上我需要知道从C函数返回时寄存器void*指针的位置.我有这个代码:

void* kmalloc(unsigned int size)
{
    asm("mov %[size], %%esi"
    : /* no outputs */
    : [size] "m" (size)
    : "esi");
    asm("movl $9, %eax");
    asm("int $0x80");

}
Run Code Online (Sandbox Code Playgroud)

应该将地址放入EAX.我认为C中的返回值存储在EAX中,但显然不是,(哦,我正在使用GCC BTW).我需要一些如何返回EAX,寄存器int将无法工作,因为编译器设置.是否有用于返回指针的寄存器?或者它是否像被推入堆栈或什么?

c assembly gcc return

3
推荐指数
1
解决办法
677
查看次数

写10位数和6位数来缩短?

我正在编写一个程序,其中一个数字(一个10位数字)存储在一个16位数字的第一部分,然后一个6位数字存储在最后.

如何利用位移来实现我的目标?

c# bit-manipulation bit-shift

2
推荐指数
1
解决办法
649
查看次数

从IRQ处理程序获取返回地址?

如何从32位保护模式(显然是x86)中查看PIT IRQ处理程序的返回值?我想我可以这样做,我不完全确定.

pop eax ; pop last thing from stack
mov dword return_address,eax
push eax
iret 
Run Code Online (Sandbox Code Playgroud)

x86 assembly

2
推荐指数
1
解决办法
150
查看次数

为什么汇编调用地址要添加0xFBFFFFFF?

好吧,我正在为我正在开发的操作系统编写一个汇编程序。它进展顺利,我已经掌握了所有 mov 指令,现在我想实现 call 和 jmp 等指令。我确实没有好的文档,所以我正在查看 NASM 生成的机器代码来查找操作码等。我想看看调用的操作码是什么,所以我编译了一些以标签开头的代码。我预计调用操作码后的地址是 00 00 00 00,但它是 FB FF FF FF。我认为这与符号有关,因此我使用 call 0x000000 编译代码以查看发生了什么,并且地址完全相同(0xFBFFFFFF)。有人可以向我解释一下吗,我很困惑。

assembly call object-code

1
推荐指数
1
解决办法
2141
查看次数

如何汇编没有签名和无符号的减法指令?

我正在为它制作一个虚拟机和一个C编译器.我没有得到的是大多数指令集有IMUL和IDIV但不是ISUB和IADD.由于sub通常是unsigned sub,我怎么能像x86那样做

MOV EAX,1
MOV EDX,3
SUB EAX,EDX,EAX
Run Code Online (Sandbox Code Playgroud)

得到-2?

assembly signed unsigned-integer

1
推荐指数
2
解决办法
984
查看次数

C#richTextBox间距问题?

我正在为我编写的聊天服务器程序编写客户端,该程序使用richTextBox控件来显示用户文本.一切都有效,除了我用于服务器motd的一些ASCII艺术.运行它时,我的文本显示如下.如您所见,间距似乎有问题. 在此输入图像描述

现在,如果我使用完全相同的字体在记事本中输入它,我就会得到这个.为什么richTextBox不显示相同的结果?我真的很困惑.....

在此输入图像描述

编辑:问题是由服务器发送的RTF引起的.如何在RTF中添加额外空间?

c# rtf richtextbox winforms

0
推荐指数
1
解决办法
899
查看次数