Kernel.cs
1 using System; 2 using System.Runtime.InteropServices; 3 using System.Text; 4 5 using HANDLE = System.IntPtr; 6 using HWND = System.IntPtr; 7 8 namespace Win32 9 { 10 public struct OVERLAPPED 11 { 12 public int Internal; 13 public int InternalHigh; 14 public int offset; 15 public int OffsetHigh; 16 public HANDLE hEvent; 17 } 18 public struct SECURITY_ATTRIBUTES 19 { 20 public int nLength; 21 public int lpSecurityDescriptor; 22 public int bInheritHandle; 23 } 24 public struct PROCESS_INFORMATION 25 { 26 public HANDLE hProcess; 27 public HANDLE hThread; 28 public int dwProcessId; 29 public int dwThreadId; 30 } 31 public struct COMMPROP 32 { 33 public short wPacketLength; 34 public short wPacketVersion; 35 public int dwServiceMask; 36 public int dwReserved1; 37 public int dwMaxTxQueue; 38 public int dwMaxRxQueue; 39 public int dwMaxBaud; 40 public int dwProvSubType; 41 public int dwProvCapabilities; 42 public int dwSettableParams; 43 public int dwSettableBaud; 44 public short wSettableData; 45 public short wSettableStopParity; 46 public int dwCurrentTxQueue; 47 public int dwCurrentRxQueue; 48 public int dwProvSpec1; 49 public int dwProvSpec2; 50 [MarshalAs(UnmanagedType.ByValArray, SizeConst=1)] public short[] wcProvChar; 51 } 52 public struct COMSTAT 53 { 54 public int fBitFields; 55 public int cbInQue; 56 public int cbOutQue; 57 } 58 public struct DCB 59 { 60 public int DCBlength; 61 public int BaudRate; 62 public int fBitFields; 63 public short wReserved; 64 public short XonLim; 65 public short XoffLim; 66 public byte ByteSize; 67 public byte Parity; 68 public byte StopBits; 69 public byte XonChar; 70 public byte XoffChar; 71 public byte ErrorChar; 72 public byte EofChar; 73 public byte EvtChar; 74 public short wReserved1; 75 } 76 public struct COMMTIMEOUTS 77 { 78 public int ReadIntervalTimeout; 79 public int ReadTotalTimeoutMultiplier; 80 public int ReadTotalTimeoutConstant; 81 public int WriteTotalTimeoutMultiplier; 82 public int WriteTotalTimeoutConstant; 83 } 84 public struct SYSTEM_INFO 85 { 86 public int dwOemID; 87 public int dwPageSize; 88 public int lpMinimumApplicationAddress; 89 public int lpMaximumApplicationAddress; 90 public int dwActiveProcessorMask; 91 public int dwNumberOrfProcessors; 92 public int dwProcessorType; 93 public int dwAllocationGranularity; 94 public int dwReserved; 95 } 96 #region Global Memory Flags 97 #endregion 98 public struct MEMORYSTATUS 99 { 100 public int dwLength; 101 public int dwMemoryLoad; 102 public int dwTotalPhys; 103 public int dwAvailPhys; 104 public int dwTotalPageFile; 105 public int dwAvailPageFile; 106 public int dwTotalVirtual; 107 public int dwAvailVirtual; 108 } 109 public struct GENERIC_MAPPING 110 { 111 public int GenericRead; 112 public int GenericWrite; 113 public int GenericExecute; 114 public int GenericAll; 115 } 116 public struct LUID 117 { 118 public int LowPart; 119 public int HighPart; 120 } 121 public struct LUID_AND_ATTRIBUTES 122 { 123 public LUID pLuid; 124 public int Attributes; 125 } 126 public struct ACL 127 { 128 public byte AclRevision; 129 public byte Sbz1; 130 public short AclSize; 131 public short AceCount; 132 public short Sbz2; 133 } 134 public struct ACE_HEADER 135 { 136 public byte AceType; 137 public byte AceFlags; 138 public int AceSize; 139 } 140 public struct ACCESS_ALLOWED_ACE 141 { 142 public ACE_HEADER Header; 143 public int Mask; 144 public int SidStart; 145 } 146 public struct ACCESS_DENIED_ACE 147 { 148 public ACE_HEADER Header; 149 public int Mask; 150 public int SidStart; 151 } 152 public struct SYSTEM_AUDIT_ACE 153 { 154 public ACE_HEADER Header; 155 public int Mask; 156 public int SidStart; 157 } 158 public struct SYSTEM_ALARM_ACE 159 { 160 public ACE_HEADER Header; 161 public int Mask; 162 public int SidStart; 163 } 164 public struct ACL_REVISION_INFORMATION 165 { 166 public int AclRevision; 167 } 168 public struct ACL_SIZE_INFORMATION 169 { 170 public int AceCount; 171 public int AclBytesInUse; 172 public int AclBytesFree; 173 } 174 public struct SECURITY_DESCRIPTOR 175 { 176 public byte Revision; 177 public byte Sbz1; 178 public int Control; 179 public int Owner; 180 public int Group; 181 public ACL Sacl; 182 public ACL Dacl; 183 } 184 public struct PRIVILEGE_SET 185 { 186 public int PrivilegeCount; 187 public int Control; 188 [MarshalAs(UnmanagedType.ByValArray, SizeConst=1)] public LUID_AND_ATTRIBUTES[] Privilege; 189 } 190 public struct EXCEPTION_RECORD 191 { 192 public int ExceptionCode; 193 public int ExceptionFlags; 194 public int pExceptionRecord; 195 public int ExceptionAddress; 196 public int NumberParameters; 197 [MarshalAs(UnmanagedType.ByValArray, SizeConst=15)] public int [] ExceptionInformation; 198 } 199 public struct EXCEPTION_DEBUG_INFO 200 { 201 public EXCEPTION_RECORD pExceptionRecord; 202 public int dwFirstChance; 203 } 204 public struct CREATE_THREAD_DEBUG_INFO 205 { 206 public HANDLE hThread; 207 public int lpThreadLocalBase; 208 public int lpStartAddress; 209 } 210 public struct CREATE_PROCESS_DEBUG_INFO 211 { 212 public HANDLE hFile; 213 public HANDLE hProcess; 214 public HANDLE hThread; 215 public int lpBaseOfImage; 216 public int dwDebugInfoFileOffset; 217 public int nDebugInfoSize; 218 public int lpThreadLocalBase; 219 public int lpStartAddress; 220 public int lpImageName; 221 public short fUnicode; 222 } 223 public struct EXIT_THREAD_DEBUG_INFO 224 { 225 public int dwExitCode; 226 } 227 public struct EXIT_PROCESS_DEBUG_INFO 228 { 229 public int dwExitCode; 230 } 231 public struct LOAD_DLL_DEBUG_INFO 232 { 233 public HANDLE hFile; 234 public int lpBaseOfDll; 235 public int dwDebugInfoFileOffset; 236 public int nDebugInfoSize; 237 public int lpImageName; 238 public short fUnicode; 239 } 240 public struct UNLOAD_DLL_DEBUG_INFO 241 { 242 public int lpBaseOfDll; 243 } 244 public struct OUTPUT_DEBUG_STRING_INFO 245 { 246 public string lpDebugStringData; 247 public short fUnicode; 248 public short nDebugStringLength; 249 } 250 public struct RIP_INFO 251 { 252 public int dwError; 253 public int dwType; 254 } 255 public struct OFSTRUCT 256 { 257 public byte cBytes; 258 public byte fFixedDisk; 259 public short nErrCode; 260 public short Reserved1; 261 public short Reserved2; 262 [MarshalAs(UnmanagedType.ByValArray, SizeConst=128)] public byte[] szPathName; 263 } 264 public struct CRITICAL_SECTION 265 { 266 public int pDebugInfo; 267 public int LockCount; 268 public int RecursionCount; 269 public int pOwningThread; 270 public int pLockSemaphore; 271 public int Reserved; 272 } 273 public struct BY_HANDLE_FILE_INFORMATION 274 { 275 public int dwFileAttributes; 276 public FILETIME ftCreationTime; 277 public FILETIME ftLastAccessTime; 278 public FILETIME ftLastWriteTime; 279 public int dwVolumeSerialNumber; 280 public int nFileSizeHigh; 281 public int nFileSizeLow; 282 public int nNumberOfLinks; 283 public int nFileIndexHigh; 284 public int nFileIndexLow; 285 } 286 public struct MEMORY_BASIC_INFORMATION 287 { 288 public int BaseAddress; 289 public int AllocationBase; 290 public int AllocationProtect; 291 public int RegionSize; 292 public int State; 293 public int Protect; 294 public int lType; 295 } 296 public struct EVENTLOGRECORD 297 { 298 public int Length; 299 public int Reserved; 300 public int RecordNumber; 301 public int TimeGenerated; 302 public int TimeWritten; 303 public int EventID; 304 public short EventType; 305 public short NumStrings; 306 public short EventCategory; 307 public short ReservedFlags; 308 public int ClosingRecordNumber; 309 public int StringOffset; 310 public int UserSidLength; 311 public int UserSidOffset; 312 public int DataLength; 313 public int DataOffset; 314 } 315 public struct TOKEN_GROUPS 316 { 317 public int GroupCount; 318 [MarshalAs(UnmanagedType.ByValArray, SizeConst=1)] public SID_AND_ATTRIBUTES[] Groups; 319 } 320 public struct TOKEN_PRIVILEGES 321 { 322 public int PrivilegeCount; 323 [MarshalAs(UnmanagedType.ByValArray, SizeConst=1)] public LUID_AND_ATTRIBUTES[] Privileges; 324 } 325 public struct CONTEXT 326 { 327 public double FltF0; 328 public double FltF1; 329 public double FltF2; 330 public double FltF3; 331 public double FltF4; 332 public double FltF5; 333 public double FltF6; 334 public double FltF7; 335 public double FltF8; 336 public double FltF9; 337 public double FltF10; 338 public double FltF11; 339 public double FltF12; 340 public double FltF13; 341 public double FltF14; 342 public double FltF15; 343 public double FltF16; 344 public double FltF17; 345 public double FltF18; 346 public double FltF19; 347 public double FltF20; 348 public double FltF21; 349 public double FltF22; 350 public double FltF23; 351 public double FltF24; 352 public double FltF25; 353 public double FltF26; 354 public double FltF27; 355 public double FltF28; 356 public double FltF29; 357 public double FltF30; 358 public double FltF31; 359 public double IntV0; 360 public double IntT0; 361 public double IntT1; 362 public double IntT2; 363 public double IntT3; 364 public double IntT4; 365 public double IntT5; 366 public double IntT6; 367 public double IntT7; 368 public double IntS0; 369 public double IntS1; 370 public double IntS2; 371 public double IntS3; 372 public double IntS4; 373 public double IntS5; 374 public double IntFp; 375 public double IntA0; 376 public double IntA1; 377 public double IntA2; 378 public double IntA3; 379 public double IntA4; 380 public double IntA5; 381 public double IntT8; 382 public double IntT9; 383 public double IntT10; 384 public double IntT11; 385 public double IntRa; 386 public double IntT12; 387 public double IntAt; 388 public double IntGp; 389 public double IntSp; 390 public double IntZero; 391 public double Fpcr; 392 public double SoftFpcr; 393 public double Fir; 394 public int Psr; 395 public int ContextFlags; 396 [MarshalAs(UnmanagedType.ByValArray, SizeConst=4)] public int []Fill; 397 } 398 public struct EXCEPTION_POINTERS 399 { 400 public EXCEPTION_RECORD pExceptionRecord; 401 public CONTEXT ContextRecord; 402 } 403 public struct LDT_BYTES 404 { 405 public byte BaseMid; 406 public byte Flags1; 407 public byte Flags2; 408 public byte BaseHi; 409 } 410 public struct LDT_ENTRY 411 { 412 public short LimitLow; 413 public short BaseLow; 414 public int HighWord; 415 } 416 public struct TIME_ZONE_INFORMATION 417 { 418 public int Bias; 419 [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)] public short[] StandardName; 420 public SYSTEMTIME StandardDate; 421 public int StandardBias; 422 [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)] public short[] DaylightName; 423 public SYSTEMTIME DaylightDate; 424 public int DaylightBias; 425 } 426 public struct WIN32_STREAM_ID 427 { 428 public int dwStreamID; 429 public int dwStreamAttributes; 430 public int dwStreamSizeLow; 431 public int dwStreamSizeHigh; 432 public int dwStreamNameSize; 433 public byte cStreamName; 434 } 435 public struct STARTUPINFO 436 { 437 public int cb; 438 public string lpReserved; 439 public string lpDesktop; 440 public string lpTitle; 441 public int dwX; 442 public int dwY; 443 public int dwXSize; 444 public int dwYSize; 445 public int dwXCountChars; 446 public int dwYCountChars; 447 public int dwFillAttribute; 448 public int dwFlags; 449 public short wShowWindow; 450 public short cbReserved2; 451 public int lpReserved2; 452 public HANDLE hStdInput; 453 public HANDLE hStdOutput; 454 public HANDLE hStdError; 455 } 456 public struct CPINFO 457 { 458 public int MaxCharSize; 459 [MarshalAs(UnmanagedType.ByValArray, SizeConst=Kernel.MAX_DEFAULTCHAR)] public byte[] DefaultChar; 460 [MarshalAs(UnmanagedType.ByValArray, SizeConst=Kernel.MAX_LEADBYTES)] public byte[] LeadByte; 461 } 462 public struct NUMBERFMT 463 { 464 public int NumDigits; 465 public int LeadingZero; 466 public int Grouping; 467 public string lpDecimalSep; 468 public string lpThousandSep; 469 public int NegativeOrder; 470 } 471 public struct CURRENCYFMT 472 { 473 public int NumDigits; 474 public int LeadingZero; 475 public int Grouping; 476 public string lpDecimalSep; 477 public string lpThousandSep; 478 public int NegativeOrder; 479 public int PositiveOrder; 480 public string lpCurrencySymbol; 481 } 482 public struct COORD 483 { 484 public short x; 485 public short y; 486 } 487 public struct SMALL_RECT 488 { 489 public short Left; 490 public short Top; 491 public short Right; 492 public short Bottom; 493 } 494 public struct KEY_EVENT_RECORD 495 { 496 public int bKeyDown; 497 public short wRepeatCount; 498 public short wVirtualKeyCode; 499 public short wVirtualScanCode; 500 public byte uChar; 501 public int dwControlKeyState; 502 } 503 public struct MOUSE_EVENT_RECORD 504 { 505 public COORD dwMousePosition; 506 public int dwButtonState; 507 public int dwControlKeyState; 508 public int dwEventFlags; 509 } 510 public struct WINDOW_BUFFER_SIZE_RECORD 511 { 512 public COORD dwSize; 513 } 514 public struct MENU_EVENT_RECORD 515 { 516 public int dwCommandId; 517 } 518 public struct FOCUS_EVENT_RECORD 519 { 520 public int bSetFocus; 521 } 522 public struct CHAR_INFO 523 { 524 public short Char; 525 public short Attributes; 526 } 527 public struct CONSOLE_SCREEN_BUFFER_INFO 528 { 529 public COORD dwSize; 530 public COORD dwCursorPosition; 531 public short wAttributes; 532 public SMALL_RECT srWindow; 533 public COORD dwMaximumWindowSize; 534 } 535 public struct CONSOLE_CURSOR_INFO 536 { 537 public int dwSize; 538 public int bVisible; 539 } 540 public struct SID_IDENTIFIER_AUTHORITY 541 { 542 [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)] public byte[] Value; 543 } 544 public struct SID_AND_ATTRIBUTES 545 { 546 public int Sid; 547 public int Attributes; 548 } 549 public struct WIN32_FIND_DATA 550 { 551 public int dwFileAttributes; 552 public FILETIME ftCreationTime; 553 public FILETIME ftLastAccessTime; 554 public FILETIME ftLastWriteTime; 555 public int nFileSizeHigh; 556 public int nFileSizeLow; 557 public int dwReserved0; 558 public int dwReserved1; 559 [MarshalAs(UnmanagedType.ByValTStr, SizeConst=Kernel.MAX_PATH)] 560 public string cFileName; 561 [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)] 562 public string cAlternate; 563 } 564 public struct COMMCONFIG 565 { 566 public int dwSize; 567 public short wVersion; 568 public short wReserved; 569 public DCB dcbx; 570 public int dwProviderSubType; 571 public int dwProviderOffset; 572 public int dwProviderSize; 573 public byte wcProviderData; 574 } 575 public struct SERVICE_STATUS 576 { 577 public int dwServiceType; 578 public int dwCurrentState; 579 public int dwControlsAccepted; 580 public int dwWin32ExitCode; 581 public int dwServiceSpecificExitCode; 582 public int dwCheckPoint; 583 public int dwWaitHint; 584 } 585 public struct ENUM_SERVICE_STATUS 586 { 587 public string lpServiceName; 588 public string lpDisplayName; 589 public SERVICE_STATUS ServiceStatus; 590 } 591 public struct QUERY_SERVICE_LOCK_STATUS 592 { 593 public int fIsLocked; 594 public string lpLockOwner; 595 public int dwLockDuration; 596 } 597 public struct QUERY_SERVICE_CONFIG 598 { 599 public int dwServiceType; 600 public int dwStartType; 601 public int dwErrorControl; 602 public string lpBinaryPathName; 603 public string lpLoadOrderGroup; 604 public int dwTagId; 605 public string lpDependencies; 606 public string lpServiceStartName; 607 public string lpDisplayName; 608 } 609 public struct SERVICE_TABLE_ENTRY 610 { 611 public string lpServiceName; 612 public int lpServiceProc; 613 } 614 public struct LARGE_INTEGER 615 { 616 public int lowpart; 617 public int highpart; 618 } 619 public struct PERF_DATA_BLOCK 620 { 621 [MarshalAs(UnmanagedType.ByValTStr, SizeConst=4)] public string Signature; 622 public int LittleEndian; 623 public int Version; 624 public int Revision; 625 public int TotalByteLength; 626 public int HeaderLength; 627 public int NumObjectTypes; 628 public int DefaultObject; 629 public SYSTEMTIME SystemTime; 630 public LARGE_INTEGER PerfTime; 631 public LARGE_INTEGER PerfFreq; 632 public LARGE_INTEGER PerTime100nSec; 633 public int SystemNameLength; 634 public int SystemNameOffset; 635 } 636 public struct PERF_OBJECT_TYPE 637 { 638 public int TotalByteLength; 639 public int DefinitionLength; 640 public int HeaderLength; 641 public int ObjectNameTitleIndex; 642 public string ObjectNameTitle; 643 public int ObjectHelpTitleIndex; 644 public string ObjectHelpTitle; 645 public int DetailLevel; 646 public int NumCounters; 647 public int DefaultCounter; 648 public int NumInstances; 649 public int CodePage; 650 public LARGE_INTEGER PerfTime; 651 public LARGE_INTEGER PerfFreq; 652 } 653 public struct PERF_COUNTER_DEFINITION 654 { 655 public int ByteLength; 656 public int CounterNameTitleIndex; 657 public string CounterNameTitle; 658 public int CounterHelpTitleIndex; 659 public string CounterHelpTitle; 660 public int DefaultScale; 661 public int DetailLevel; 662 public int CounterType; 663 public int CounterSize; 664 public int CounterOffset; 665 } 666 public struct PERF_INSTANCE_DEFINITION 667 { 668 public int ByteLength; 669 public int ParentObjectTitleIndex; 670 public int ParentObjectInstance; 671 public int UniqueID; 672 public int NameOffset; 673 public int NameLength; 674 } 675 public struct PERF_COUNTER_BLOCK 676 { 677 public int ByteLength; 678 } 679 public struct OSVERSIONINFO 680 { 681 public int dwOSVersionInfoSize; 682 public int dwMajorVersion; 683 public int dwMinorVersion; 684 public int dwBuildNumber; 685 public int dwPlatformId; 686 [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] public string szCSDVersion; 687 } 688 public struct SYSTEM_POWER_STATUS 689 { 690 public byte ACLineStatus; 691 public byte BatteryFlag; 692 public byte BatteryLifePercent; 693 public byte Reserved1; 694 public int BatteryLifeTime; 695 public int BatteryFullLifeTime; 696 } 697 698 public abstract class AdvApi 699 { 700 [DllImport("AdvApi32")] public static extern int ImpersonateLoggedOnUser(HANDLE hToken); 701 [DllImport("advapi32")] public static extern int IsTextUnicode(IntPtr lpBuffer, int cb, ref int lpi); 702 [DllImport("advapi32")] public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref int phToken); 703 [DllImport("advapi32")] public static extern int NotifyChangeEventLog(HANDLE hEventLog, HANDLE hEvent); 704 [DllImport("advapi32")] public static extern int SetThreadToken(int Thread, int Token); 705 [DllImport("advapi32")] public static extern Byte GetSidSubAuthorityCount(IntPtr pSid); 706 [DllImport("advapi32")] public static extern SID_IDENTIFIER_AUTHORITY GetSidIdentifierAuthority(IntPtr pSid); 707 [DllImport("advapi32")] public static extern int AbortSystemShutdown(string lpMachineName); 708 [DllImport("advapi32")] public static extern int AccessCheck(ref SECURITY_DESCRIPTOR pSecurityDescriptor, int ClientToken, int DesiredAccess, GENERIC_MAPPING GenericMapping, PRIVILEGE_SET PrivilegeSet, int PrivilegeSetLength, int GrantedAccess, int Status); 709 [DllImport("advapi32")] public static extern int AccessCheckAndAuditAlarm(string SubsystemName, IntPtr HandleId, string ObjectTypeName, string ObjectName, SECURITY_DESCRIPTOR SecurityDescriptor, int DesiredAccess, GENERIC_MAPPING GenericMapping, int ObjectCreation, int GrantedAccess, int AccessStatus, ref int pfGenerateOnClose); 710 [DllImport("advapi32")] public static extern int AddAccessAllowedAce(ref ACL pAcl, int dwAceRevision, int AccessMask, IntPtr pSid); 711 [DllImport("advapi32")] public static extern int AddAccessDeniedAce(ref ACL pAcl, int dwAceRevision, int AccessMask, IntPtr pSid); 712 [DllImport("advapi32")] public static extern int AddAce(ref ACL pAcl, int dwAceRevision, int dwStartingAceIndex, IntPtr pAceList, int nAceListLength); 713 [DllImport("advapi32")] public static extern int AddAuditAccessAce(ref ACL pAcl, int dwAceRevision, int dwAccessMask, IntPtr pSid, int bAuditSuccess, int bAuditFailure); 714 [DllImport("advapi32")] public static extern int AdjustTokenGroups(int TokenHandle, int ResetToDefault, TOKEN_GROUPS NewState, int BufferLength, TOKEN_GROUPS PreviousState, int ReturnLength); 715 [DllImport("advapi32")] public static extern int AdjustTokenPrivileges(int TokenHandle, int DisableAllPrivileges, TOKEN_PRIVILEGES NewState, int BufferLength, TOKEN_PRIVILEGES PreviousState, int ReturnLength); 716 [DllImport("advapi32")] public static extern int AllocateAndInitializeSid(ref SID_IDENTIFIER_AUTHORITY pIdentifierAuthority, Byte nSubAuthorityCount, int nSubAuthority0, int nSubAuthority1, int nSubAuthority2, int nSubAuthority3, int nSubAuthority4, int nSubAuthority5, int nSubAuthority6, int nSubAuthority7, ref int lpPSid); 717 [DllImport("advapi32")] public static extern int AllocateLocallyUniqueId(LARGE_INTEGER Luid); 718 [DllImport("advapi32")] public static extern int AreAllAccessesGranted(int GrantedAccess, int DesiredAccess); 719 [DllImport("advapi32")] public static extern int AreAnyAccessesGranted(int GrantedAccess, int DesiredAccess); 720 [DllImport("advapi32")] public static extern int BackupEventLog(HANDLE hEventLog, string lpBackupFileName); 721 [DllImport("advapi32")] public static extern int ChangeServiceConfig(HANDLE hService, int dwServiceType, int dwStartType, int dwErrorControl, string lpBinaryPathName, string lpLoadOrderGroup, ref int lpdwTagId, string lpDependencies, string lpServiceStartName, string lpPassword, string lpDisplayName); 722 [DllImport("advapi32")] public static extern int ClearEventLog(HANDLE hEventLog, string lpBackupFileName); 723 [DllImport("advapi32")] public static extern int CloseEventLog(HANDLE hEventLog); 724 [DllImport("advapi32")] public static extern int CloseServiceHandle(HANDLE hSCObject); 725 [DllImport("advapi32")] public static extern int ControlService(HANDLE hService, int dwControl, ref SERVICE_STATUS lpServiceStatus); 726 [DllImport("advapi32")] public static extern int CopySid(int nDestinationSidLength, IntPtr pDestinationSid, IntPtr pSourceSid); 727 [DllImport("advapi32")] public static extern int CreatePrivateObjectSecurity(ref SECURITY_DESCRIPTOR ParentDescriptor, SECURITY_DESCRIPTOR CreatorDescriptor, SECURITY_DESCRIPTOR NewDescriptor, int IsDirectoryObject, int Token, GENERIC_MAPPING GenericMapping); 728 [DllImport("advapi32")] public static extern int CreateProcessAsUser(HANDLE hToken, string lpApplicationName, string lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes, ref SECURITY_ATTRIBUTES lpThreadAttributes, int bInheritHandles, int dwCreationFlags, string lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, ref PROCESS_INFORMATION lpProcessInformation); 729 [DllImport("advapi32")] public static extern int CreateServ