//opens a driver device and gets the complete KiServiceTable public unsafe KiServiceTable GetKiServiceTable() { //the service table we will fill out and return later KiServiceTable kiServiceTable = new KiServiceTable(); int NumberOfServices; //open driver try { //our in and out buffer byte[] inBuffer = new byte[0]; byte[] outBuffer = new byte[0x1000]; //should be big enough // Interact(IOCTL_GET_SERVICE_TABLE(), inBuffer, outBuffer); //didn't found a byte[4] to int convertion method ... //First dword is NumberOfServices NumberOfServices = 0; fixed(byte *pOut = outBuffer) //unmanaged data { //first dword is cnt for number of services in this os NumberOfServices = ((int *)pOut)[0]; //and then the complete service table ... for (int cnt = 0; cnt < NumberOfServices; cnt++) { //get address uint address = ((uint *)pOut)[cnt + 1]; //create new entry KiServiceTableEntry entry = new KiServiceTableEntry(address); //resolve module name for that address entry.Module = GetModuleName(address); kiServiceTable.Add(entry); } } } catch (Exception e) { string msg = e.StackTrace + "\n\n" + e.Message + "\n\n" + e.HelpLink + "\n please contact the developer"; MessageBox.Show(msg); } return(kiServiceTable); }
//opens a driver device and gets the complete KiServiceTable public unsafe KiServiceTable GetKiServiceTable() { //the service table we will fill out and return later KiServiceTable kiServiceTable = new KiServiceTable(); int NumberOfServices; //open driver try { //our in and out buffer byte[] inBuffer = new byte[0]; byte[] outBuffer = new byte[0x1000]; //should be big enough // Interact(IOCTL_GET_SERVICE_TABLE(), inBuffer, outBuffer); //didn't found a byte[4] to int convertion method ... //First dword is NumberOfServices NumberOfServices = 0; fixed (byte* pOut = outBuffer) //unmanaged data { //first dword is cnt for number of services in this os NumberOfServices = ((int*)pOut)[0]; //and then the complete service table ... for (int cnt = 0; cnt < NumberOfServices; cnt++) { //get address uint address = ((uint*)pOut)[cnt + 1]; //create new entry KiServiceTableEntry entry = new KiServiceTableEntry(address); //resolve module name for that address entry.Module = GetModuleName(address); kiServiceTable.Add(entry); } } } catch (Exception e) { string msg = e.StackTrace + "\n\n" + e.Message + "\n\n" + e.HelpLink + "\n please contact the developer"; MessageBox.Show(msg); } return kiServiceTable; }