/
Advapi32.java
1160 lines (1098 loc) · 57.7 KB
/
Advapi32.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinNT.HANDLEByReference;
import com.sun.jna.platform.win32.WinNT.PSID;
import com.sun.jna.platform.win32.WinNT.PSIDByReference;
import com.sun.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.platform.win32.WinReg.HKEYByReference;
import com.sun.jna.platform.win32.Winsvc.SC_HANDLE;
import com.sun.jna.platform.win32.Winsvc.SERVICE_STATUS;
import com.sun.jna.platform.win32.Winsvc.SERVICE_STATUS_PROCESS;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
/**
* Advapi32.dll Interface.
* @author dblock[at]dblock.org
*/
public interface Advapi32 extends StdCallLibrary {
Advapi32 INSTANCE = (Advapi32) Native.loadLibrary("Advapi32",
Advapi32.class, W32APIOptions.UNICODE_OPTIONS);
/**
* Retrieves the name of the user associated with the current thread.
* http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx
*
* @param buffer
* Buffer to receive the user's logon name.
* @param len
* On input, the size of the buffer, on output the number of
* characters copied into the buffer, including the terminating
* null character.
* @return
* True if succeeded.
*/
public boolean GetUserNameW(char[] buffer, IntByReference len);
/**
* Accepts the name of a system and anaccount as input and retrieves a security
* identifier (SID) for the account and the name of the domain on which the
* account was found.
* http://msdn.microsoft.com/en-us/library/aa379159(VS.85).aspx
*
* @param lpSystemName
* Specifies the name of the system.
* @param lpAccountName
* Specifies the account name.
* @param Sid
* Receives the SID structure that corresponds to the account
* name pointed to by the lpAccountName parameter.
* @param cbSid
* On input, this value specifies the size, in bytes, of the Sid
* buffer. If the function fails because the buffer is too small
* or if cbSid is zero, this variable receives the required
* buffer size.
* @param ReferencedDomainName
* Receives the name of the domain where the account name is found.
* @param cchReferencedDomainName
* On input, this value specifies the size, in TCHARs, of the
* ReferencedDomainName buffer. If the function fails because the
* buffer is too small, this variable receives the required
* buffer size, including the terminating null character.
* @param peUse
* SID_NAME_USE enumerated type that indicates the type of the
* account when the function returns.
* @return
* True if the function was successful, False otherwise.
*/
public boolean LookupAccountName(String lpSystemName,
String lpAccountName, PSID Sid, IntByReference cbSid,
char[] ReferencedDomainName,
IntByReference cchReferencedDomainName, PointerByReference peUse);
/**
* Retrieves the name of the account for this SID and the name of the first domain
* on which this SID is found.
*
* @param lpSystemName Specifies the target computer.
* @param Sid The SID to look up.
* @param lpName
* Buffer that receives a null-terminated string that contains the
* account name that corresponds to the lpSid parameter.
* @param cchName
* On input, specifies the size, in TCHARs, of the lpName buffer. If the function fails
* because the buffer is too small or if cchName is zero, cchName receives the required
* buffer size, including the terminating null character.
* @param ReferencedDomainName
* Pointer to a buffer that receives a null-terminated string that contains the name of
* the domain where the account name was found.
* @param cchReferencedDomainName
* On input, specifies the size, in TCHARs, of the lpReferencedDomainName buffer. If the
* function fails because the buffer is too small or if cchReferencedDomainName is zero,
* cchReferencedDomainName receives the required buffer size, including the terminating
* null character.
* @param peUse
* Pointer to a variable that receives a SID_NAME_USE value that indicates the type of
* the account.
* @return
* If the function succeeds, the function returns nonzero.
* If the function fails, it returns zero. To get extended error information, call
* GetLastError.
*/
public boolean LookupAccountSid(String lpSystemName, PSID Sid,
char[] lpName, IntByReference cchName, char[] ReferencedDomainName,
IntByReference cchReferencedDomainName, PointerByReference peUse);
/**
* Convert a security identifier (SID) to a string format suitable for display,
* storage, or transmission.
* http://msdn.microsoft.com/en-us/library/aa376399(VS.85).aspx
*
* @param Sid
* The SID structure to be converted.
* @param StringSid
* Pointer to a variable that receives a pointer to a
* null-terminated SID string. To free the returned buffer, call
* the LocalFree function.
* @return True if the function was successful, False otherwise.
*/
public boolean ConvertSidToStringSid(PSID Sid,
PointerByReference StringSid);
/**
* Convert a string-format security identifier (SID) into a valid, functional SID.
* http://msdn.microsoft.com/en-us/library/aa376402(VS.85).aspx
*
* @param StringSid The string-format SID to convert.
* @param Sid Receives a pointer to the converted SID.
* @return True if the function was successful, False otherwise.
*/
public boolean ConvertStringSidToSid(String StringSid,
PSIDByReference Sid);
/**
* Returns the length, in bytes, of a valid security identifier (SID).
* http://msdn.microsoft.com/en-us/library/aa446642(VS.85).aspx
*
* @param pSid A pointer to the SID structure whose length is returned.
* @return Length of the SID.
*/
public int GetLengthSid(PSID pSid);
/**
* The IsValidSid function validates a security identifier (SID) by verifying that
* the revision number is within a known range, and that the number of subauthorities
* is less than the maximum.
* @param pSid
* Pointer to the SID structure to validate. This parameter cannot be NULL.
* @return
* If the SID structure is valid, the return value is nonzero.
* If the SID structure is not valid, the return value is zero. There is no extended
* error information for this function; do not call GetLastError.
*/
public boolean IsValidSid(PSID pSid);
/**
* Compares a SID to a well known SID and returns TRUE if they match.
* @param pSid
* SID to test.
* @param wellKnownSidType
* Member of the WELL_KNOWN_SID_TYPE enumeration to compare with the SID at pSid.
* @return
* True if the SID is of a given well known type, false otherwise.
*/
public boolean IsWellKnownSid(PSID pSid, int wellKnownSidType);
/**
* The CreateWellKnownSid function creates a SID for predefined aliases.
* @param wellKnownSidType
* Member of the WELL_KNOWN_SID_TYPE enumeration that specifies what the SID will identify.
* @param domainSid
* Pointer to a SID that identifies the domain control to use when creating the SID.
* Pass NULL to use the local computer.
* @param pSid
* Pointer to memory where CreateWellKnownSid will store the new SID.
* @param cbSid
* Pointer to a DWORD that contains the number of bytes available at pSid.
* The CreateWellKnownSid function stores the number of bytes actually used
* at this location.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. For extended error information,
* call GetLastError.
*/
public boolean CreateWellKnownSid(int wellKnownSidType,
PSID domainSid, PSID pSid, IntByReference cbSid);
/**
* The LogonUser function attempts to log a user on to the local computer. The local computer is
* the computer from which LogonUser was called. You cannot use LogonUser to log on to a remote
* computer. You specify the user with a user name and domain, and authenticate the user with a
* plaintext password. If the function succeeds, you receive a handle to a token that represents
* the logged-on user. You can then use this token handle to impersonate the specified user or,
* in most cases, to create a process that runs in the context of the specified user.
* @param lpszUsername
* A pointer to a null-terminated string that specifies the name of the user. This is the name of
* the user account to log on to. If you use the user principal name (UPN) format,
* user@DNS_domain_name, the lpszDomain parameter must be NULL.
* @param lpszDomain
* A pointer to a null-terminated string that specifies the name of the domain or server whose
* account database contains the lpszUsername account. If this parameter is NULL, the user name
* must be specified in UPN format. If this parameter is ".", the function validates the account
* using only the local account database.
* @param lpszPassword
* A pointer to a null-terminated string that specifies the plaintext password for the user
* account specified by lpszUsername.
* @param logonType
* The type of logon operation to perform.
* @param logonProvider
* Specifies the logon provider.
* @param phToken
* A pointer to a handle variable that receives a handle to a token that represents the specified user.
* @return
* If the function succeeds, the function returns nonzero.
* If the function fails, it returns zero. To get extended error information, call GetLastError.
*/
public boolean LogonUser(
String lpszUsername,
String lpszDomain,
String lpszPassword,
int logonType,
int logonProvider,
HANDLEByReference phToken);
/**
* The OpenThreadToken function opens the access token associated with a thread.
* @param ThreadHandle
* Handle to the thread whose access token is opened.
* @param DesiredAccess
* Specifies an access mask that specifies the requested types of access to the access token.
* These requested access types are reconciled against the token's discretionary access
* control list (DACL) to determine which accesses are granted or denied.
* @param OpenAsSelf
* Indicates whether the access check is to be made against the security context of the
* thread calling the OpenThreadToken function or against the security context of the
* process for the calling thread.
* @param TokenHandle
* Pointer to a variable that receives the handle to the newly opened access token.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information,
* call GetLastError.
*/
public boolean OpenThreadToken(
HANDLE ThreadHandle,
int DesiredAccess,
boolean OpenAsSelf,
HANDLEByReference TokenHandle);
/**
* The OpenProcessToken function opens the access token associated with a process.
* @param ProcessHandle
* Handle to the process whose access token is opened. The process must have the
* PROCESS_QUERY_INFORMATION access permission.
* @param DesiredAccess
* Specifies an access mask that specifies the requested types of access to the access
* token. These requested access types are compared with the discretionary access
* control list (DACL) of the token to determine which accesses are granted or denied.
* @param TokenHandle
* Pointer to a handle that identifies the newly opened access token when the function returns.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information,
* call GetLastError.
*/
public boolean OpenProcessToken(
HANDLE ProcessHandle,
int DesiredAccess,
HANDLEByReference TokenHandle);
/**
* The DuplicateToken function creates a new access token that duplicates
* one already in existence.
*
* @param ExistingTokenHandle
* Handle to an access token opened with TOKEN_DUPLICATE access.
* @param ImpersonationLevel
* Specifies a SECURITY_IMPERSONATION_LEVEL enumerated type that supplies
* the impersonation level of the new token.
* @param DuplicateTokenHandle
* Pointer to a variable that receives a handle to the duplicate token.
* This handle has TOKEN_IMPERSONATE and TOKEN_QUERY access to the new token.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information,
* call GetLastError.
*/
public boolean DuplicateToken(
HANDLE ExistingTokenHandle,
int ImpersonationLevel,
HANDLEByReference DuplicateTokenHandle);
/**
* The DuplicateTokenEx function creates a new access token that duplicates an existing token.
* This function can create either a primary token or an impersonation token.
* @param hExistingToken A handle to an access token opened with TOKEN_DUPLICATE access.
* @param dwDesiredAccess Specifies the requested access rights for the new token.
* @param lpTokenAttributes A pointer to a SECURITY_ATTRIBUTES structure that specifies a security
* descriptor for the new token and determines whether child processes can inherit the token.
* @param ImpersonationLevel Specifies a value from the SECURITY_IMPERSONATION_LEVEL enumeration
* that indicates the impersonation level of the new token.
* @param TokenType Specifies one of the following values from the TOKEN_TYPE enumeration.
* @param phNewToken A pointer to a HANDLE variable that receives the new token.
* @return If the function succeeds, the function returns a nonzero value.
* If the function fails, it returns zero. To get extended error information, call GetLastError.
*/
public boolean DuplicateTokenEx(
HANDLE hExistingToken,
int dwDesiredAccess,
WinBase.SECURITY_ATTRIBUTES lpTokenAttributes,
int ImpersonationLevel,
int TokenType,
HANDLEByReference phNewToken);
/**
* Retrieves a specified type of information about an access token.
* The calling process must have appropriate access rights to obtain the information.
* @param tokenHandle
* Handle to an access token from which information is retrieved. If TokenInformationClass
* specifies TokenSource, the handle must have TOKEN_QUERY_SOURCE access. For all other
* TokenInformationClass values, the handle must have TOKEN_QUERY access.
* @param tokenInformationClass
* Specifies a value from the TOKEN_INFORMATION_CLASS enumerated type to identify the type of
* information the function retrieves.
* @param tokenInformation
* Pointer to a buffer the function fills with the requested information. The structure put
* into this buffer depends upon the type of information specified by the TokenInformationClass
* parameter.
* @param tokenInformationLength
* Specifies the size, in bytes, of the buffer pointed to by the TokenInformation parameter.
* If TokenInformation is NULL, this parameter must be zero.
* @param returnLength
* Pointer to a variable that receives the number of bytes needed for the buffer pointed to by
* the TokenInformation parameter. If this value is larger than the value specified in the
* TokenInformationLength parameter, the function fails and stores no data in the buffer.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean GetTokenInformation(
HANDLE tokenHandle,
int tokenInformationClass,
Structure tokenInformation,
int tokenInformationLength,
IntByReference returnLength);
/**
* The ImpersonateLoggedOnUser function lets the calling thread impersonate the
* security context of a logged-on user. The user is represented by a token
* handle.
* @param hToken
* Handle to a primary or impersonation access token that represents a logged-on
* user. This can be a token handle returned by a call to LogonUser,
* CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken,
* or OpenThreadToken functions. If hToken is a primary token, it must have
* TOKEN_QUERY and TOKEN_DUPLICATE access. If hToken is an impersonation token,
* it must have TOKEN_QUERY and TOKEN_IMPERSONATE access.
* @return
* If the function succeeds, the return value is nonzero.
*/
public boolean ImpersonateLoggedOnUser(HANDLE hToken);
/**
* The ImpersonateSelf function obtains an access token that impersonates the security
* context of the calling process. The token is assigned to the calling thread.
* @param ImpersonationLevel Specifies a SECURITY_IMPERSONATION_LEVEL enumerated type
* that supplies the impersonation level of the new token.
* @return If the function succeeds, the return value is nonzero.
*/
public boolean ImpersonateSelf(int ImpersonationLevel);
/**
* The RevertToSelf function terminates the impersonation of a client application.
* @return If the function succeeds, the return value is nonzero.
*/
public boolean RevertToSelf();
/**
* The RegOpenKeyEx function opens the specified registry key.
* Note that key names are not case sensitive.
* @param hKey
* Handle to an open key.
* @param lpSubKey
* Pointer to a null-terminated string containing the name of the subkey to open.
* @param ulOptions
* Reserved; must be zero.
* @param samDesired
* Access mask that specifies the desired access rights to the key. The function
* fails if the security descriptor of the key does not permit the requested access
* for the calling process.
* @param phkResult
* Pointer to a variable that receives a handle to the opened key. If the key is
* not one of the predefined registry keys, call the RegCloseKey function after
* you have finished using the handle.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS.
* If the function fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegOpenKeyEx(HKEY hKey, String lpSubKey, int ulOptions, int samDesired,
HKEYByReference phkResult);
/**
* The RegQueryValueEx function retrieves the type and data for a specified value name
* associated with an open registry key.
* @param hKey
* Handle to an open key. The key must have been opened with the
* KEY_QUERY_VALUE access right.
* @param lpValueName
* Pointer to a null-terminated string containing the name of the value to query.
* If lpValueName is NULL or an empty string, "", the function retrieves the type
* and data for the key's unnamed or default value, if any.
* @param lpReserved
* Reserved; must be NULL.
* @param lpType
* Pointer to a variable that receives a code indicating the type of data stored
* in the specified value.
* @param lpData
* Pointer to a buffer that receives the value's data. This parameter can be NULL
* if the data is not required. If the data is a string, the function checks for
* a terminating null character. If one is not found, the string is stored with a
* null terminator if the buffer is large enough to accommodate the extra
* character. Otherwise, the string is stored as is.
* @param lpcbData
* Pointer to a variable that specifies the size of the buffer pointed to by the
* lpData parameter, in bytes. When the function returns, this variable contains
* the size of the data copied to lpData. The lpcbData parameter can be NULL only
* if lpData is NULL. If the data has the REG_SZ, REG_MULTI_SZ or REG_EXPAND_SZ
* type, this size includes any terminating null character or characters.
* If the buffer specified by lpData parameter is not large enough to hold the
* data, the function returns ERROR_MORE_DATA and stores the required buffer size
* in the variable pointed to by lpcbData. In this case, the contents of the lpData
* buffer are undefined. If lpData is NULL, and lpcbData is non-NULL, the function
* returns ERROR_SUCCESS and stores the size of the data, in bytes, in the variable
* pointed to by lpcbData. This enables an application to determine the best way
* to allocate a buffer for the value's data.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS.
* If the function fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved,
IntByReference lpType, char[] lpData, IntByReference lpcbData);
public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved,
IntByReference lpType, byte[] lpData, IntByReference lpcbData);
public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved,
IntByReference lpType, IntByReference lpData, IntByReference lpcbData);
public int RegQueryValueEx(HKEY hKey, String lpValueName, int lpReserved,
IntByReference lpType, Pointer lpData, IntByReference lpcbData);
/**
* The RegCloseKey function releases a handle to the specified registry key.
* @param hKey
* Handle to the open key to be closed. The handle must have been opened by the
* RegCreateKeyEx, RegOpenKeyEx, or RegConnectRegistry function.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegCloseKey(HKEY hKey);
/**
* The RegDeleteValue function removes a named value from the specified registry
* key. Note that value names are not case sensitive.
* @param hKey
* Handle to an open key. The key must have been opened with the KEY_SET_VALUE
* access right.
* @param lpValueName
* Pointer to a null-terminated string that names the value to remove. If this
* parameter is NULL or an empty string, the value set by the RegSetValue function
* is removed.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegDeleteValue(HKEY hKey, String lpValueName);
/**
* The RegSetValueEx function sets the data and type of a specified value under a
* registry key.
* @param hKey
* Handle to an open key. The key must have been opened with the KEY_SET_VALUE
* access right.
* @param lpValueName
* Pointer to a string containing the name of the value to set. If a value with
* this name is not already present in the key, the function adds it to the key.
* If lpValueName is NULL or an empty string, "", the function sets the type and
* data for the key's unnamed or default value.
* @param Reserved
* Reserved; must be zero.
* @param dwType
* Type of data pointed to by the lpData parameter.
* @param lpData
* Pointer to a buffer containing the data to be stored with the specified value name.
* @param cbData
* Size of the information pointed to by the lpData parameter, in bytes. If the data
* is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of
* the terminating null character or characters.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegSetValueEx(HKEY hKey, String lpValueName, int Reserved, int dwType,
char[] lpData, int cbData);
public int RegSetValueEx(HKEY hKey, String lpValueName, int Reserved, int dwType,
byte[] lpData, int cbData);
/**
*
* @param hKey
* @param lpSubKey
* @param Reserved
* @param lpClass
* @param dwOptions
* @param samDesired
* @param lpSecurityAttributes
* @param phkResult
* @param lpdwDisposition
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegCreateKeyEx(HKEY hKey, String lpSubKey, int Reserved, String lpClass,
int dwOptions, int samDesired, SECURITY_ATTRIBUTES lpSecurityAttributes,
HKEYByReference phkResult, IntByReference lpdwDisposition);
/**
*
* @param hKey
* @param name
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegDeleteKey(HKEY hKey, String name);
/**
* The RegEnumKeyEx function enumerates subkeys of the specified open registry key.
* The function retrieves information about one subkey each time it is called.
* @param hKey
* Handle to an open key. The key must have been opened with the
* KEY_ENUMERATE_SUB_KEYS access right.
* @param dwIndex
* Index of the subkey to retrieve. This parameter should be zero for the first
* call to the RegEnumKeyEx function and then incremented for subsequent calls.
* Because subkeys are not ordered, any new subkey will have an arbitrary index.
* This means that the function may return subkeys in any order.
* @param lpName
* Pointer to a buffer that receives the name of the subkey, including the
* terminating null character. The function copies only the name of the subkey,
* not the full key hierarchy, to the buffer.
* @param lpcName
* Pointer to a variable that specifies the size of the buffer specified by the
* lpName parameter, in TCHARs. This size should include the terminating null
* character. When the function returns, the variable pointed to by lpcName
* contains the number of characters stored in the buffer. The count returned
* does not include the terminating null character.
* @param reserved
* Reserved; must be NULL.
* @param lpClass
* Pointer to a buffer that receives the null-terminated class string of the
* enumerated subkey. This parameter can be NULL.
* @param lpcClass
* Pointer to a variable that specifies the size of the buffer specified by the
* lpClass parameter, in TCHARs. The size should include the terminating null
* character. When the function returns, lpcClass contains the number of
* characters stored in the buffer. The count returned does not include the
* terminating null character. This parameter can be NULL only if lpClass is NULL.
* @param lpftLastWriteTime
* Pointer to a variable that receives the time at which the enumerated subkey
* was last written.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegEnumKeyEx(HKEY hKey, int dwIndex, char[] lpName, IntByReference lpcName,
IntByReference reserved, char[] lpClass, IntByReference lpcClass,
WinBase.FILETIME lpftLastWriteTime);
/**
* The RegEnumValue function enumerates the values for the specified open registry
* key. The function copies one indexed value name and data block for the key each
* time it is called.
* @param hKey
* Handle to an open key. The key must have been opened with the KEY_QUERY_VALUE
* access right.
* @param dwIndex
* Index of the value to be retrieved. This parameter should be zero for the first
* call to the RegEnumValue function and then be incremented for subsequent calls.
* Because values are not ordered, any new value will have an arbitrary index.
* This means that the function may return values in any order.
* @param lpValueName
* Pointer to a buffer that receives the name of the value, including the
* terminating null character.
* @param lpcchValueName
* Pointer to a variable that specifies the size of the buffer pointed to by the
* lpValueName parameter, in TCHARs. This size should include the terminating null
* character. When the function returns, the variable pointed to by lpcValueName
* contains the number of characters stored in the buffer. The count returned
* does not include the terminating null character.
* @param reserved
* Reserved; must be NULL.
* @param lpType
* Pointer to a variable that receives a code indicating the type of data stored
* in the specified value.
* @param lpData
* Pointer to a buffer that receives the data for the value entry. This parameter
* can be NULL if the data is not required.
* @param lpcbData
* Pointer to a variable that specifies the size of the buffer pointed to by the
* lpData parameter, in bytes.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegEnumValue(HKEY hKey, int dwIndex, char[] lpValueName,
IntByReference lpcchValueName, IntByReference reserved,
IntByReference lpType, byte[] lpData, IntByReference lpcbData);
/**
* The RegQueryInfoKey function retrieves information about the specified
* registry key.
* @param hKey
* A handle to an open key. The key must have been opened with the
* KEY_QUERY_VALUE access right.
* @param lpClass
* A pointer to a buffer that receives the null-terminated class
* string of the key. This parameter can be ignored. This parameter can be NULL.
* @param lpcClass
* A pointer to a variable that specifies the size of the buffer pointed to by
* the lpClass parameter, in characters.
* @param lpReserved
* Reserved; must be NULL.
* @param lpcSubKeys
* A pointer to a variable that receives the number of subkeys that are contained by the specified key.
* This parameter can be NULL.
* @param lpcMaxSubKeyLen
* A pointer to a variable that receives the size of the key's subkey with the
* longest name, in characters, not including the terminating null character.
* This parameter can be NULL.
* @param lpcMaxClassLen
* A pointer to a variable that receives the size of the longest string that
* specifies a subkey class, in characters. The count returned does not include
* the terminating null character. This parameter can be NULL.
* @param lpcValues
* A pointer to a variable that receives the number of values that are associated
* with the key. This parameter can be NULL.
* @param lpcMaxValueNameLen
* A pointer to a variable that receives the size of the key's longest value name,
* in characters. The size does not include the terminating null character. This
* parameter can be NULL.
* @param lpcMaxValueLen
* A pointer to a variable that receives the size of the longest data component
* among the key's values, in bytes. This parameter can be NULL.
* @param lpcbSecurityDescriptor
* A pointer to a variable that receives the size of the key's security descriptor,
* in bytes. This parameter can be NULL.
* @param lpftLastWriteTime
* A pointer to a FILETIME structure that receives the last write time.
* This parameter can be NULL.
* @return
* If the function succeeds, the return value is ERROR_SUCCESS. If the function
* fails, the return value is a nonzero error code defined in Winerror.h.
*/
public int RegQueryInfoKey(HKEY hKey, char[] lpClass,
IntByReference lpcClass, IntByReference lpReserved,
IntByReference lpcSubKeys, IntByReference lpcMaxSubKeyLen,
IntByReference lpcMaxClassLen, IntByReference lpcValues,
IntByReference lpcMaxValueNameLen, IntByReference lpcMaxValueLen,
IntByReference lpcbSecurityDescriptor,
WinBase.FILETIME lpftLastWriteTime);
/**
* Retrieves a registered handle to the specified event log.
* @param lpUNCServerName
* The Universal Naming Convention (UNC) name of the remote server on which
* this operation is to be performed. If this parameter is NULL, the local
* computer is used.
* @param lpSourceName
* The name of the event source whose handle is to be retrieved.
* The source name must be a subkey of a log under the Eventlog registry
* key. However, the Security log is for system use only.
* @return
* If the function succeeds, the return value is a handle to the event log.
* If the function fails, the return value is NULL. To get extended error information, call GetLastError.
* The function returns ERROR_ACCESS_DENIED if lpSourceName specifies the Security event log.
*/
public HANDLE RegisterEventSource(String lpUNCServerName, String lpSourceName);
/**
* Closes the specified event log.
* @param hEventLog
* A handle to the event log. The RegisterEventSource function returns this handle.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean DeregisterEventSource(HANDLE hEventLog);
/**
* Opens a handle to the specified event log.
* @param lpUNCServerName
* The Universal Naming Convention (UNC) name of the remote server on which the event log is to be
* opened. If this parameter is NULL, the local computer is used.
* @param lpSourceName
* The name of the log. If you specify a custom log and it cannot be found, the event logging
* service opens the Application log; however, there will be no associated message or category
* string file.
* @return
* If the function succeeds, the return value is the handle to an event log.
* If the function fails, the return value is NULL. To get extended error information, call GetLastError.
*/
public HANDLE OpenEventLog(String lpUNCServerName, String lpSourceName);
/**
* Closes the specified event log.
* @param hEventLog
* A handle to the event log to be closed. The OpenEventLog or OpenBackupEventLog function returns this handle.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean CloseEventLog(HANDLE hEventLog);
/**
* Retrieves the number of records in the specified event log.
* @param hEventLog
* A handle to the open event log. The OpenEventLog or OpenBackupEventLog function returns this handle.
* @param NumberOfRecords
* A pointer to a variable that receives the number of records in the specified event log.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean GetNumberOfEventLogRecords(HANDLE hEventLog, IntByReference NumberOfRecords);
/**
* Writes an entry at the end of the specified event log.
* @param hEventLog
* A handle to the event log. The RegisterEventSource function returns this handle.
* As of Windows XP with SP2, this parameter cannot be a handle to the Security log.
* To write an event to the Security log, use the AuthzReportSecurityEvent function.
* @param wType
* The type of event to be logged.
* @param wCategory
* The event category. This is source-specific information; the category can have any value.
* @param dwEventID
* The event identifier. The event identifier specifies the entry in the message file
* associated with the event source.
* @param lpUserSid
* A pointer to the current user's security identifier. This parameter can be NULL if the security identifier is not required.
* @param wNumStrings
* The number of insert strings in the array pointed to by the lpStrings parameter. A value of zero indicates that no strings are present.
* @param dwDataSize
* The number of bytes of event-specific raw (binary) data to write to the log. If this parameter is zero, no event-specific data is present.
* @param lpStrings
* A pointer to a buffer containing an array of null-terminated strings that are merged into
* the message before Event Viewer displays the string to the user. This parameter must
* be a valid pointer (or NULL), even if wNumStrings is zero. Each string is limited to
* 31,839 characters.
* @param lpRawData
* A pointer to the buffer containing the binary data. This parameter must be a valid
* pointer (or NULL), even if the dwDataSize parameter is zero.
* @return
* If the function succeeds, the return value is nonzero, indicating that the entry was written to the log.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean ReportEvent(HANDLE hEventLog, int wType, int wCategory, int dwEventID,
PSID lpUserSid, int wNumStrings, int dwDataSize, String[] lpStrings,
Pointer lpRawData);
/**
* Clears the specified event log, and optionally saves the current copy of the log to a backup file.
* @param hEventLog
* A handle to the event log to be cleared. The OpenEventLog function returns this handle.
* @param lpBackupFileName
* The absolute or relative path of the backup file. If this file already exists, the function fails.
* If the lpBackupFileName parameter is NULL, the event log is not backed up.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information,
* call GetLastError. The ClearEventLog function can fail if the event log is empty or the backup file already exists.
*/
public boolean ClearEventLog(HANDLE hEventLog, String lpBackupFileName);
/**
* Saves the specified event log to a backup file. The function does not clear the event log.
* @param hEventLog
* A handle to the open event log. The OpenEventLog function returns this handle.
* @param lpBackupFileName
* The absolute or relative path of the backup file.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean BackupEventLog(HANDLE hEventLog, String lpBackupFileName);
/**
* Opens a handle to a backup event log created by the BackupEventLog function.
* @param lpUNCServerName
* The Universal Naming Convention (UNC) name of the remote server on which this operation
* is to be performed. If this parameter is NULL, the local computer is used.
* @param lpFileName
* The full path of the backup file.
* @return
* If the function succeeds, the return value is a handle to the backup event log.
* If the function fails, the return value is NULL. To get extended error information, call GetLastError.
*/
public HANDLE OpenBackupEventLog(String lpUNCServerName, String lpFileName);
/**
* Reads the specified number of entries from the specified event log. The function can
* be used to read log entries in chronological or reverse chronological order.
* @param hEventLog
* A handle to the event log to be read. The OpenEventLog function returns this handle.
* @param dwReadFlags
* Use the following flag values to indicate how to read the log file.
* @param dwRecordOffset
* The record number of the log-entry at which the read operation should start.
* This parameter is ignored unless dwReadFlags includes the EVENTLOG_SEEK_READ flag.
* @param lpBuffer
* An application-allocated buffer that will receive one or more EVENTLOGRECORD structures.
* This parameter cannot be NULL, even if the nNumberOfBytesToRead parameter is zero.
* The maximum size of this buffer is 0x7ffff bytes.
* @param nNumberOfBytesToRead
* The size of the lpBuffer buffer, in bytes. This function will read as many log entries
* as will fit in the buffer; the function will not return partial entries.
* @param pnBytesRead
* A pointer to a variable that receives the number of bytes read by the function.
* @param pnMinNumberOfBytesNeeded
* A pointer to a variable that receives the required size of the lpBuffer buffer.
* This value is valid only this function returns zero and GetLastError
* returns ERROR_INSUFFICIENT_BUFFER.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean ReadEventLog(HANDLE hEventLog, int dwReadFlags, int dwRecordOffset,
Pointer lpBuffer, int nNumberOfBytesToRead, IntByReference pnBytesRead,
IntByReference pnMinNumberOfBytesNeeded);
/**
* The GetOldestEventLogRecord function retrieves the absolute record number of the oldest
* record in the specified event log.
* @param hEventLog
* Handle to the open event log. This handle is returned by the OpenEventLog or OpenBackupEventLog function.
* @param OldestRecord
* Pointer to a variable that receives the absolute record number of the oldest record in the specified event log.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended error information, call GetLastError.
*/
public boolean GetOldestEventLogRecord(HANDLE hEventLog, IntByReference OldestRecord);
/**
* Retrieves the current status of the specified service based on the specified information level.
* @param hService
* A handle to the service. This handle is returned by the
* OpenService(SC_HANDLE, String, int) or CreateService() function, and
* it must have the SERVICE_QUERY_STATUS access right. For more information, see
* <a href="http://msdn.microsoft.com/en-us/library/ms685981.aspx">Service Security and Access Rights</a>.
* @param InfoLevel
* The service attributes to be returned (a value from SC_STATUS_TYPE enumeration).
* Use SC_STATUS_PROCESS_INFO to retrieve the service status information. The lpBuffer
* parameter is a pointer to a SERVICE_STATUS_PROCESS structure.
* Currently, no other information levels are defined.
* @param lpBuffer (optional)
* A pointer to the buffer that receives the status information. The format of this data
* depends on the value of the InfoLevel parameter.
* The maximum size of this array is 8K bytes. To determine the required size, specify NULL
* for this parameter and 0 for the cbBufSize parameter. The function will fail and GetLastError
* will return ERROR_INSUFFICIENT_BUFFER. The pcbBytesNeeded parameter will receive the required size.
* @param cbBufSize
* The size of the buffer pointed to by the lpBuffer parameter, in bytes.
* @param pcbBytesNeeded
* A pointer to a variable that receives the number of bytes needed to store all status
* information, if the function fails with ERROR_INSUFFICIENT_BUFFER.
* @return
* If the function succeeds, the return value is true.
* If the function fails, the return value is false. To get extended error information,
* call GetLastError. This value is a nonzero error code defined in Winerror.h.
*/
public boolean QueryServiceStatusEx(SC_HANDLE hService, int InfoLevel,
SERVICE_STATUS_PROCESS lpBuffer, int cbBufSize, IntByReference pcbBytesNeeded);
/**
* Sends a control code to a service.
* To specify additional information when stopping a service, use the
* ControlServiceEx function.
* @param hService
* A handle to the service. This handle is returned by the
* OpenService(SC_HANDLE, String, int) or CreateService()
* function. The access rights required for this handle depend on the
* dwControl code requested.
* @param dwControl
* This parameter can be one of the following control codes (found in Winsvc.h):
* SERVICE_CONTROL_STOP, SERVICE_CONTROL_PAUSE, SERVICE_CONTROL_CONTINUE
* SERVICE_CONTROL_INTERROGATE, SERVICE_CONTROL_PARAMCHANGE,
* SERVICE_CONTROL_NETBINDADD, SERVICE_CONTROL_NETBINDREMOVE,
* SERVICE_CONTROL_NETBINDENABLE, SERVICE_CONTROL_NETBINDDISABLE
* This value can also be a user-defined control code, as described below:
* Range 128 to 255 - The service defines the action associated with the
* control code. The hService handle must have the SERVICE_USER_DEFINED_CONTROL
* access right.
* @param lpServiceStatus
* A pointer to a SERVICE_STATUS structure that receives the latest
* service status information. The information returned reflects the most
* recent status that the service reported to the service control manager.
* The service control manager fills in the structure only when ControlService
* returns one of the following error codes: NO_ERROR, ERROR_INVALID_SERVICE_CONTROL,
* ERROR_SERVICE_CANNOT_ACCEPT_CTRL, or ERROR_SERVICE_NOT_ACTIVE. Otherwise,
* the structure is not filled in.
* @return
* If the function succeeds, the return value is true.
* If the function fails, the return value is false. To get extended error information,
* call GetLastError. This value is a nonzero error code defined in Winerror.h.
*/
public boolean ControlService(SC_HANDLE hService, int dwControl,
SERVICE_STATUS lpServiceStatus);
/**
* Starts a service.
* @param hService
* A handle to the service. This handle is returned by the
* OpenService(SC_HANDLE, String, int) or CreateService()
* function, and it must have the SERVICE_START access right. For more
* information, see <a href="http://msdn.microsoft.com/en-us/library/ms685981.aspx">
* Service Security and Access Rights</a>.
* @param dwNumServiceArgs
* The number of strings in the lpServiceArgVectors array. If lpServiceArgVectors
* is NULL, this parameter can be zero.
* @param lpServiceArgVectors
* The null-terminated strings to be passed to the ServiceMain function for the
* service as arguments. If there are no arguments, this parameter can be null.
* Otherwise, the first argument (lpServiceArgVectors[0]) is the name of the
* service, followed by any additional arguments (lpServiceArgVectors[1] through
* lpServiceArgVectors[dwNumServiceArgs-1]).
* Driver services do not receive these arguments.
* @return
* If the function succeeds, the return value is true.
* If the function fails, the return value is false. To get extended error information,
* call GetLastError. This value is a nonzero error code defined in Winerror.h.
*/
public boolean StartService(SC_HANDLE hService, int dwNumServiceArgs,
String[] lpServiceArgVectors);
/**
* Closes a handle to a service control manager or service object.
* @param hSCObject
* A handle to the service control manager object or the service object to
* close. Handles to service control manager objects are returned by the
* OpenSCManager(String, String, int) function, and handles to service
* objects are returned by either the OpenService(SC_HANDLE, String, int)
* or CreateService() function.
* @return
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero. To get extended
* error information, call GetLastError. This value is a nonzero error code
* defined in Winerror.h.
*/
public boolean CloseServiceHandle(SC_HANDLE hSCObject);
/**
* Opens an existing service.
* @param hSCManager
* A handle to the service control manager database. The
* OpenSCManager(String, String, int) function returns this handle.
* @param lpServiceName
* The name of the service to be opened. This is the name specified by the
* lpServiceName parameter of the CreateService function when the service
* object was created, not the service display name that is shown by user
* interface applications to identify the service.
* The maximum string length is 256 characters. The service control manager
* database preserves the case of the characters, but service name comparisons