本文整理汇总了Golang中C.HANDLE函数的典型用法代码示例。如果您正苦于以下问题:Golang HANDLE函数的具体用法?Golang HANDLE怎么用?Golang HANDLE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了HANDLE函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: DetachNotifyHandler
func DetachNotifyHandler(hwnd uint32) {
key := uintptr(hwnd)
if _, exists := notifyHandlers[key]; exists {
C.HTMLayoutSetCallback(C.HWND(C.HANDLE(key)), nil, nil)
delete(notifyHandlers, key)
}
}
示例2: RootElement
func RootElement(hwnd uint32) *Element {
var handle HELEMENT = BAD_HELEMENT
if ret := C.HTMLayoutGetRootElement(C.HWND(C.HANDLE(uintptr(hwnd))), (*C.HELEMENT)(&handle)); ret != HLDOM_OK {
domPanic(ret, "Failed to get root element")
}
return NewElementFromHandle(handle)
}
示例3: requestManualStop
func (dbp *Process) requestManualStop() error {
res := C.DebugBreakProcess(C.HANDLE(dbp.os.hProcess))
if res == C.FALSE {
return fmt.Errorf("failed to break process %d", dbp.Pid)
}
return nil
}
示例4: LoadHtml
// Load html contents into window
func LoadHtml(hwnd uint32, data []byte, baseUrl string) error {
if len(data) > 0 {
if ok := C.HTMLayoutLoadHtmlEx(C.HWND(C.HANDLE(uintptr(hwnd))), (*C.BYTE)(&data[0]),
C.UINT(len(data)), (*C.WCHAR)(stringToUtf16Ptr(baseUrl))); ok == 0 {
return errors.New("HTMLayoutLoadHtmlEx failed")
}
}
return nil
}
示例5: SetPC
// SetPC sets the RIP register to the value specified by `pc`.
func (r *Regs) SetPC(thread *Thread, pc uint64) error {
var context C.CONTEXT
context.ContextFlags = C.CONTEXT_ALL
res := C.GetThreadContext(C.HANDLE(thread.os.hThread), &context)
if res == C.FALSE {
return fmt.Errorf("could not GetThreadContext")
}
context.Rip = C.DWORD64(pc)
res = C.SetThreadContext(C.HANDLE(thread.os.hThread), &context)
if res == C.FALSE {
return fmt.Errorf("could not SetThreadContext")
}
return nil
}
示例6: FocusedElement
func FocusedElement(hwnd uint32) *Element {
var handle HELEMENT = BAD_HELEMENT
if ret := C.HTMLayoutGetFocusElement(C.HWND(C.HANDLE(uintptr(hwnd))), (*C.HELEMENT)(&handle)); ret != HLDOM_OK {
domPanic(ret, "Failed to get focus element")
}
if handle != BAD_HELEMENT {
return NewElementFromHandle(handle)
}
return nil
}
示例7: DetachWindowEventHandler
func DetachWindowEventHandler(hwnd uint32) {
key := uintptr(hwnd)
if handler, exists := windowEventHandlers[hwnd]; exists {
tag := uintptr(unsafe.Pointer(handler))
if ret := C.HTMLayoutWindowDetachEventHandler(C.HWND(C.HANDLE(key)), (*[0]byte)(unsafe.Pointer(goElementProc)), C.LPVOID(tag)); ret != HLDOM_OK {
domPanic(ret, "Failed to detach event handler from window")
}
delete(windowEventHandlers, hwnd)
}
}
示例8: newHandle
func newHandle(c *Config) (handle syscall.Handle, err error) {
handle, err = syscall.CreateFile(
syscall.StringToUTF16Ptr(c.Address),
syscall.GENERIC_READ|syscall.GENERIC_WRITE,
0, // mode
nil, // security
syscall.OPEN_EXISTING, // create mode
0, // attributes
0) // templates
if err != nil {
return
}
defer func() {
if err != nil {
syscall.CloseHandle(handle)
}
}()
var dcb C.DCB
dcb.BaudRate = C.DWORD(c.BaudRate)
// Data bits
if c.DataBits == 0 {
dcb.ByteSize = 8
} else {
dcb.ByteSize = C.BYTE(c.DataBits)
}
// Stop bits
switch c.StopBits {
case 0, 1:
// Default is one stop bit.
dcb.StopBits = C.ONESTOPBIT
case 2:
dcb.StopBits = C.TWOSTOPBITS
default:
err = fmt.Errorf("serial: unsupported stop bits %v", c.StopBits)
return
}
// Parity
switch c.Parity {
case "", "E":
// Default parity mode is Even.
dcb.Parity = C.EVENPARITY
case "O":
dcb.Parity = C.ODDPARITY
case "N":
dcb.Parity = C.NOPARITY
default:
err = fmt.Errorf("serial: unsupported parity %v", c.Parity)
return
}
if C.SetCommState(C.HANDLE(handle), &dcb) == 0 {
err = fmt.Errorf("serial: could not set device state: %v", syscall.GetLastError())
return
}
return
}
示例9: registers
func registers(thread *Thread) (Registers, error) {
var context C.CONTEXT
context.ContextFlags = C.CONTEXT_ALL
res := C.GetThreadContext(C.HANDLE(thread.os.hThread), &context)
if res == C.FALSE {
return nil, fmt.Errorf("failed to read ThreadContext")
}
var threadInfo C.THREAD_BASIC_INFORMATION
res = C.thread_basic_information(C.HANDLE(thread.os.hThread), &threadInfo)
if res == C.FALSE {
return nil, fmt.Errorf("failed to get thread_basic_information")
}
tls := uintptr(threadInfo.TebBaseAddress)
regs := &Regs{
rax: uint64(context.Rax),
rbx: uint64(context.Rbx),
rcx: uint64(context.Rcx),
rdx: uint64(context.Rdx),
rdi: uint64(context.Rdi),
rsi: uint64(context.Rsi),
rbp: uint64(context.Rbp),
rsp: uint64(context.Rsp),
r8: uint64(context.R8),
r9: uint64(context.R9),
r10: uint64(context.R10),
r11: uint64(context.R11),
r12: uint64(context.R12),
r13: uint64(context.R13),
r14: uint64(context.R14),
r15: uint64(context.R15),
rip: uint64(context.Rip),
eflags: uint64(context.EFlags),
cs: uint64(context.SegCs),
fs: uint64(context.SegFs),
gs: uint64(context.SegGs),
tls: uint64(tls),
}
return regs, nil
}
示例10: AttachWindowEventHandler
func AttachWindowEventHandler(hwnd uint32, handler *EventHandler) {
key := uintptr(hwnd)
tag := uintptr(unsafe.Pointer(handler))
if _, exists := windowEventHandlers[hwnd]; exists {
if ret := C.HTMLayoutWindowDetachEventHandler(C.HWND(C.HANDLE(key)), (*[0]byte)(unsafe.Pointer(goElementProc)), C.LPVOID(tag)); ret != HLDOM_OK {
domPanic(ret, "Failed to detach event handler from window before adding the new one")
}
}
// Overwrite if it exists
windowEventHandlers[hwnd] = handler
// Don't let the caller disable ATTACH/DETACH events, otherwise we
// won't know when to throw out our event handler object
subscription := handler.Subscription()
subscription &= ^uint32(DISABLE_INITIALIZATION & 0xffffffff)
if ret := C.HTMLayoutWindowAttachEventHandler(C.HWND(C.HANDLE(key)), (*[0]byte)(unsafe.Pointer(goElementProc)), C.LPVOID(tag), C.UINT(subscription)); ret != HLDOM_OK {
domPanic(ret, "Failed to attach event handler to window")
}
}
示例11: writeMemory
func (t *Thread) writeMemory(addr uintptr, data []byte) (int, error) {
var (
vmData = C.LPCVOID(unsafe.Pointer(&data[0]))
vmAddr = C.LPVOID(addr)
length = C.SIZE_T(len(data))
count C.SIZE_T
)
ret := C.WriteProcessMemory(C.HANDLE(t.dbp.os.hProcess), vmAddr, vmData, length, &count)
if ret == C.FALSE {
return int(count), fmt.Errorf("could not write memory")
}
return int(count), nil
}
示例12: Kill
// Kill kills the process.
func (dbp *Process) Kill() error {
if dbp.exited {
return nil
}
if !dbp.Threads[dbp.Pid].Stopped() {
return errors.New("process must be stopped in order to kill it")
}
// TODO: Should not have to ignore failures here,
// but some tests appear to Kill twice causing
// this to fail on second attempt.
_ = C.TerminateProcess(C.HANDLE(dbp.os.hProcess), 1)
dbp.exited = true
return nil
}
示例13: readMemory
func (t *Thread) readMemory(addr uintptr, size int) ([]byte, error) {
if size == 0 {
return nil, nil
}
var (
buf = make([]byte, size)
vmData = C.LPVOID(unsafe.Pointer(&buf[0]))
vmAddr = C.LPCVOID(addr)
length = C.SIZE_T(size)
count C.SIZE_T
)
ret := C.ReadProcessMemory(C.HANDLE(t.dbp.os.hProcess), vmAddr, vmData, length, &count)
if ret == C.FALSE {
return nil, fmt.Errorf("could not read memory")
}
return buf, nil
}
示例14: registers
func registers(thread *Thread) (Registers, error) {
var context C.CONTEXT
context.ContextFlags = C.CONTEXT_ALL
res := C.GetThreadContext(C.HANDLE(thread.os.hThread), &context)
if res == C.FALSE {
return nil, fmt.Errorf("failed to read ThreadContext")
}
var threadInfo _THREAD_BASIC_INFORMATION
status := _NtQueryInformationThread(syscall.Handle(thread.os.hThread), _ThreadBasicInformation, uintptr(unsafe.Pointer(&threadInfo)), uint32(unsafe.Sizeof(threadInfo)), nil)
if !_NT_SUCCESS(status) {
return nil, fmt.Errorf("failed to get thread_basic_information")
}
regs := &Regs{
rax: uint64(context.Rax),
rbx: uint64(context.Rbx),
rcx: uint64(context.Rcx),
rdx: uint64(context.Rdx),
rdi: uint64(context.Rdi),
rsi: uint64(context.Rsi),
rbp: uint64(context.Rbp),
rsp: uint64(context.Rsp),
r8: uint64(context.R8),
r9: uint64(context.R9),
r10: uint64(context.R10),
r11: uint64(context.R11),
r12: uint64(context.R12),
r13: uint64(context.R13),
r14: uint64(context.R14),
r15: uint64(context.R15),
rip: uint64(context.Rip),
eflags: uint64(context.EFlags),
cs: uint64(context.SegCs),
fs: uint64(context.SegFs),
gs: uint64(context.SegGs),
tls: uint64(threadInfo.TebBaseAddress),
}
return regs, nil
}
示例15: Open
// Open connects to the given serial port.
func (p *port) Open(c *Config) (err error) {
handle, err := newHandle(c)
if err != nil {
return
}
// Read and write timeout
if c.Timeout > 0 {
timeout := C.DWORD(c.Timeout.Nanoseconds() / 1E6)
var timeouts C.COMMTIMEOUTS
// wait until a byte arrived or time out
timeouts.ReadIntervalTimeout = C.MAXDWORD
timeouts.ReadTotalTimeoutMultiplier = C.MAXDWORD
timeouts.ReadTotalTimeoutConstant = timeout
timeouts.WriteTotalTimeoutMultiplier = 0
timeouts.WriteTotalTimeoutConstant = timeout
if C.SetCommTimeouts(C.HANDLE(handle), &timeouts) == 0 {
err = fmt.Errorf("serial: could not set timeout: %v", syscall.GetLastError())
syscall.CloseHandle(handle)
return
}
}
p.handle = handle
return
}