我正在尝试使用kernal32.dll中的几个函数.但是,当我的应用程序尝试调用第一个函数时,它会抛出一个EntryPointNotFoundExceptionUnable to find an entry point named 'SetDllDirectory' in DLL 'kernel32.dll'.
public class MyClass
{
/// <summary>
/// Use to interface to kernel32.dll for dynamic loading of similar DLLs.
/// </summary>
internal static class UnsafeNativeMethods
{
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
internal static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
internal static extern bool SetDllDirectory(string lpPathName);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
internal …Run Code Online (Sandbox Code Playgroud) GetProductInfo(API函数)似乎在XP Professional上崩溃,而它在Windows 7旗舰版上完美运行.它的替代品是什么?
我正在尝试编写一个销售点系统,允许"现金抽屉"附件.手册中提供了打开现金抽屉的代码(使用IOCTL以C++编写).由于我在C#.NET中编码,是否可以在C#中执行类似的操作,或者我是否必须编写一些非托管代码?
我能从C#中获得"\\.\ ADVANSYS"的句柄吗?我需要使用DLLImport吗?
如果有人能指出我正确的方向,我将不胜感激.
// IOCTL Codes
#define GPD_TYPE 56053
#define ADV_OPEN_CTL_CODE CTL_CODE(GPD_TYPE, 0x920, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define ADV_STATUS_CTL_CODE CTL_CODE(GPD_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS)
void OpenDrawer(UCHAR uWhichDrawer) // uWhichDrawer = 1 => CD#1, uWhichDrawer = 2 => CD#2
{
HANDLE hFile;
BOOL bRet
UCHAR uDrawer = uWhichDrawer;
// Open the driver
hFile = CreateFile(TEXT("\\\\.\\ADVSYS"),
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (m_hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox("Unable to open Cash Drawer Device Driver!");
return;
}
// Turn on the …Run Code Online (Sandbox Code Playgroud) 有人请告诉我这个代码有什么问题我只是从kernel32.dll调用Sleep函数有什么问题?我正在使用Visual Studio 2008.任何帮助都将不胜感激.非常感谢你.
__asm
{
mov eax, 77e2ef66h
push 9999
call eax
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CreateSymbolicLinkW()函数(来自Kernel32.dll)来创建符号链接.
在相应的计算机上(Win7 Pro x64 SP1):
现在的情况是:
最后一个案例是实际问题.GetLastError返回的错误是:1314(="客户端未保留所需的权限").
为什么在没有升级的进程中管理员用户失败,而它适用于未高效的shell中的任何非管理员用户?
我的代码旨在由任何类型的用户运行,最好是在一个不高的过程中.要求管理员用户提升流程作为一种解决方法是我在任何情况下都要避免的.
使用Windows shell btw中的MKLINK命令也可以重现相同的行为(非升级shell中的admin用户失败,而非升级shell中的所有非管理员用户都失败).
我非常感谢任何想法/建议.提前谢谢了!
编辑:Python 2.7的示例代码:
import ctypes
CreateSymbolicLinkW = ctypes.WinDLL("Kernel32").CreateSymbolicLinkW
CreateSymbolicLinkW(u"c:\\linktest\\testlink.txt", u"c:\\linktest\\testtarget.txt",0)
print(ctypes.WinDLL("Kernel32").GetLastError())
Run Code Online (Sandbox Code Playgroud)
Symbol Server是在C++/Windows中获取kernel32.dll符号的唯一方法吗?
谢谢:)
我一直在寻找堆栈溢出,但似乎找不到任何东西
Windows 64 位上的 kernel32.dll 中的哪些命令和函数可以在屏幕上绘制单个像素,最好没有 user32.dll 窗口?
正如我所见,extern汇编代码中的WinAPI函数具有类似的名称_ExitProcess@4.
该@4部分的含义是什么,以及如何确定之后使用的数字@?
我知道这与我们链接的DLL有关,但在很多情况下,不知道在使用后使用的是什么数字@,这会导致许多令人讨厌的undefined reference错误.
我正在尝试使用winapi和kernel32条板箱使用Rust更改Windows控制台的前景色。
[dependencies]
winapi = "0.2.8"
kernel32-sys = "0.2.1"
Run Code Online (Sandbox Code Playgroud)
码
我存储前景色值的枚举:
#[repr(u16)]
pub enum ForegroundColor {
RED = (winapi::FOREGROUND_INTENSITY | winapi::FOREGROUND_RED) as u16,
CYAN = (winapi::FOREGROUND_INTENSITY | winapi::FOREGROUND_GREEN | winapi::FOREGROUND_BLUE) as u16,
// ...
}
Run Code Online (Sandbox Code Playgroud)
获取输出句柄的函数:
use winapi;
use winapi::{CONSOLE_SCREEN_BUFFER_INFO, COORD, HANDLE, SMALL_RECT, WORD};
use kernel32;
static mut CONSOLE_OUTPUT_HANDLE: Option<HANDLE> = None;
pub fn get_output_handle() -> HANDLE {
unsafe {
if let Some(handle) = CONSOLE_OUTPUT_HANDLE {
handle_check(handle);
handle
} else {
let handle = kernel32::GetStdHandle(winapi::STD_OUTPUT_HANDLE);
handle_check(handle);
CONSOLE_OUTPUT_HANDLE = Some(handle);
handle
} …Run Code Online (Sandbox Code Playgroud)