From 25347d2a2820f20f30c8556baef36fe6e7067a79 Mon Sep 17 00:00:00 2001 From: midipix Date: Tue, 10 May 2016 01:16:26 -0400 Subject: internals: __ntapi_log_write(): initial implementation. --- src/internal/ntapi_log.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/internal/ntapi_log.h (limited to 'src/internal/ntapi_log.h') diff --git a/src/internal/ntapi_log.h b/src/internal/ntapi_log.h new file mode 100644 index 0000000..108bc18 --- /dev/null +++ b/src/internal/ntapi_log.h @@ -0,0 +1,66 @@ +/********************************************************/ +/* ntapi: Native API core library */ +/* Copyright (C) 2013--2016 Z. Gilboa */ +/* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */ +/********************************************************/ + +#include +#include +#include +#include "ntapi_impl.h" + +static inline int __ntapi_uintptr_to_utf8(uintptr_t value,unsigned char * buf) +{ + int i,len; + uintptr_t val; + + if (!value) { + *buf = '0'; + len = 1; + } else { + for (len=0,val=value; val; val=val/10,len++); + for (i=len,buf+=len-1; i; i--,buf--,value=value/10) + *buf = '0' + (value % 10); + } + + return len; +} + +static inline ssize_t __ntapi_log_write(void * msg,uint32_t size) +{ + int32_t status; + void * hlog; + nt_iosb iosb; + uintptr_t buffer[8] = {0}; + char * ch = (char *)buffer; + + if (!(hlog = __ntapi_internals()->rtdata->hlog)) + return NT_STATUS_INVALID_HANDLE; + + *ch++ = '@'; + ch += __ntapi_uintptr_to_utf8( + pe_get_current_process_id(), + ch); + *ch++ = ':'; + ch += __ntapi_uintptr_to_utf8( + pe_get_current_thread_id(), + ch); + *ch++ = '@'; + *ch++ = ' '; + + __ntapi->zw_write_file( + hlog, + 0,0,0,&iosb, + buffer, + (uint32_t)(ch-(char *)buffer), + 0,0); + + status = __ntapi->zw_write_file( + hlog, + 0,0,0,&iosb, + msg, + (uint32_t)size, + 0,0); + + return status ? -1 : iosb.info; +} -- cgit v1.2.3