/********************************************************/ /* ntapi: Native API core library */ /* Copyright (C) 2013--2017 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}; unsigned char * ch = (unsigned 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-(unsigned 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; }