Copyright (c) 2002, 2016 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM - Initial API and implementation Mikael Barbero (Eclipse Foundation) - 286681 handle WAIT_ABANDONED_0 return value
/******************************************************************************* * Copyright (c) 2002, 2016 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM - Initial API and implementation * Mikael Barbero (Eclipse Foundation) - 286681 handle WAIT_ABANDONED_0 return value *******************************************************************************/
package org.eclipse.core.internal.resources.refresh.win32;
Hooks for native methods involved with win32 auto-refresh callbacks.
/** * Hooks for native methods involved with win32 auto-refresh callbacks. */
public class Win32Natives { /* general purpose */
A general use constant expressing the value of an invalid handle.
/** * A general use constant expressing the value of an * invalid handle. */
public static final long INVALID_HANDLE_VALUE;
An error constant which indicates that the previous function succeeded.
/** * An error constant which indicates that the previous function * succeeded. */
public static final int ERROR_SUCCESS;
An error constant which indicates that a handle is or has become invalid.
/** * An error constant which indicates that a handle is or has become * invalid. */
public static final int ERROR_INVALID_HANDLE;
The combination of all of the error constants.
/** * The combination of all of the error constants. */
public static int FILE_NOTIFY_ALL;
A constant which indicates the maximum number of objects that can be passed into WaitForMultipleObjects.
/** * A constant which indicates the maximum number of objects * that can be passed into WaitForMultipleObjects. */
public static final int MAXIMUM_WAIT_OBJECTS;
A constant which indicates the maximum length of a pathname.
/** * A constant which indicates the maximum length of a pathname. */
public static final int MAX_PATH;
A constant which expresses the concept of the infinite.
/** * A constant which expresses the concept of the infinite. */
public static final int INFINITE; /* wait return values */
A constant used returned WaitForMultipleObjects when the function times out.
/** * A constant used returned WaitForMultipleObjects when the function times out. */
public static final int WAIT_TIMEOUT;
A constant used by WaitForMultipleObjects to indicate the object which was signaled.
/** * A constant used by WaitForMultipleObjects to indicate the object which was * signaled. */
public static final int WAIT_OBJECT_0;
A constant which indicates that some objects which were waiting to be signaled are an abandoned mutex objects.
/** * A constant which indicates that some objects which * were waiting to be signaled are an abandoned mutex * objects. */
public static final int WAIT_ABANDONED_0;
A constant returned by WaitForMultipleObjects which indicates that the wait failed.
/** * A constant returned by WaitForMultipleObjects which indicates * that the wait failed. */
public static final int WAIT_FAILED; /* wait notification filter masks */
Change filter for monitoring file rename, creation or deletion.
/** * Change filter for monitoring file rename, creation or deletion. */
public static final int FILE_NOTIFY_CHANGE_FILE_NAME;
Change filter for monitoring directory creation or deletion.
/** * Change filter for monitoring directory creation or deletion. */
public static final int FILE_NOTIFY_CHANGE_DIR_NAME;
Change filter for monitoring file/directory attribute changes.
/** * Change filter for monitoring file/directory attribute changes. */
public static final int FILE_NOTIFY_CHANGE_ATTRIBUTES;
Change filter for monitoring file size changes.
/** * Change filter for monitoring file size changes. */
public static final int FILE_NOTIFY_CHANGE_SIZE;
Change filter for monitoring the file write timestamp
/** * Change filter for monitoring the file write timestamp */
public static final int FILE_NOTIFY_CHANGE_LAST_WRITE;
Change filter for monitoring the security descriptors of files.
/** * Change filter for monitoring the security descriptors * of files. */
public static final int FILE_NOTIFY_CHANGE_SECURITY;
Flag indicating whether or not the OS supports unicode calls.
/** * Flag indicating whether or not the OS supports unicode calls. */
public static final boolean UNICODE; /* * Make requests to set the constants. */ static { System.loadLibrary("win32refresh"); //$NON-NLS-1$ UNICODE = IsUnicode(); INVALID_HANDLE_VALUE = INVALID_HANDLE_VALUE(); ERROR_SUCCESS = ERROR_SUCCESS(); ERROR_INVALID_HANDLE = ERROR_INVALID_HANDLE(); MAXIMUM_WAIT_OBJECTS = MAXIMUM_WAIT_OBJECTS(); MAX_PATH = MAX_PATH(); INFINITE = INFINITE(); WAIT_TIMEOUT = WAIT_TIMEOUT(); WAIT_OBJECT_0 = WAIT_OBJECT_0(); WAIT_ABANDONED_0 = WAIT_ABANDONED_0(); WAIT_FAILED = WAIT_FAILED(); FILE_NOTIFY_CHANGE_FILE_NAME = FILE_NOTIFY_CHANGE_FILE_NAME(); FILE_NOTIFY_CHANGE_DIR_NAME = FILE_NOTIFY_CHANGE_DIR_NAME(); FILE_NOTIFY_CHANGE_ATTRIBUTES = FILE_NOTIFY_CHANGE_ATTRIBUTES(); FILE_NOTIFY_CHANGE_SIZE = FILE_NOTIFY_CHANGE_SIZE(); FILE_NOTIFY_CHANGE_LAST_WRITE = FILE_NOTIFY_CHANGE_LAST_WRITE(); FILE_NOTIFY_CHANGE_SECURITY = FILE_NOTIFY_CHANGE_SECURITY(); FILE_NOTIFY_ALL = FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_SECURITY; }
Creates a change notification object for the given path. The notification object allows the client to monitor changes to the directory and the subtree under the directory using FindNextChangeNotification or WaitForMultipleObjects.

If the OS supports unicode the path must be no longer than 2^15 - 1 characters. Otherwise, the path cannot be longer than MAX_PATH. In either case, if the given path is too long ERROR_INVALID_HANDLE is returned.

Params:
  • lpPathName – The path of the file.
  • bWatchSubtree – If true, specifies that the entire tree under the given path should be monitored. If false specifies that just the named path should be monitored.
  • dwNotifyFilter – Any combination of FILE_NOTIFY_CHANGE_FILE_NAME, FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, or FILE_NOTIFY_CHANGE_SECURITY.
Returns:long The handle to the find change notification object or ERROR_INVALID_HANDLE if the attempt fails.
/** * Creates a change notification object for the given path. The notification * object allows the client to monitor changes to the directory and the * subtree under the directory using FindNextChangeNotification or * WaitForMultipleObjects. * <p> * If the OS supports unicode the path must be no longer than 2^15 - 1 characters. * Otherwise, the path cannot be longer than MAX_PATH. In either case, if the given * path is too long ERROR_INVALID_HANDLE is returned. * * @param lpPathName The path of the file. * @param bWatchSubtree If <code>true</code>, specifies that the entire * tree under the given path should be monitored. If <code>false</code> * specifies that just the named path should be monitored. * @param dwNotifyFilter Any combination of FILE_NOTIFY_CHANGE_FILE_NAME, * FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, * FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, or * FILE_NOTIFY_CHANGE_SECURITY. * @return long The handle to the find change notification object or * ERROR_INVALID_HANDLE if the attempt fails. */
public static long FindFirstChangeNotification(String lpPathName, boolean bWatchSubtree, int dwNotifyFilter) { if (UNICODE) return FindFirstChangeNotificationW(lpPathName, bWatchSubtree, dwNotifyFilter); return FindFirstChangeNotificationA(Convert.toPlatformBytes(lpPathName), bWatchSubtree, dwNotifyFilter); }
Creates a change notification object for the given path. This notification object allows the client to monitor changes to the directory and the subtree under the directory using FindNextChangeNotification or WaitForMultipleObjects.
Params:
  • lpPathName – The path to the directory to be monitored. Cannot be null, or longer than 2^15 - 1 characters.
  • bWatchSubtree – If true, specifies that the entire tree under the given path should be monitored. If false specifies that just the named path should be monitored.
  • dwNotifyFilter – Any combination of FILE_NOTIFY_CHANGE_FILE_NAME, FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, or FILE_NOTIFY_CHANGE_SECURITY.
Returns:long The handle to the find change notification object or ERROR_INVALID_HANDLE if the attempt fails.
/** * Creates a change notification object for the given path. This notification object * allows the client to monitor changes to the directory and the subtree * under the directory using FindNextChangeNotification or * WaitForMultipleObjects. * * @param lpPathName The path to the directory to be monitored. Cannot be <code>null</code>, * or longer than 2^15 - 1 characters. * @param bWatchSubtree If <code>true</code>, specifies that the entire * tree under the given path should be monitored. If <code>false</code> * specifies that just the named path should be monitored. * @param dwNotifyFilter Any combination of FILE_NOTIFY_CHANGE_FILE_NAME, * FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, * FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, or * FILE_NOTIFY_CHANGE_SECURITY. * @return long The handle to the find change notification object or * ERROR_INVALID_HANDLE if the attempt fails. */
private static native long FindFirstChangeNotificationW(String lpPathName, boolean bWatchSubtree, int dwNotifyFilter);
Creates a change notification object for the given path. This notification object allows the client to monitor changes to the directory and the subtree under the directory using FindNextChangeNotification or WaitForMultipleObjects.
Params:
  • lpPathName – The path to the directory to be monitored, cannot be null, or be longer than MAX_PATH. This path must be in platform bytes converted.
  • bWatchSubtree – If true, specifies that the entire tree under the given path should be monitored. If false specifies that just the named path should be monitored.
  • dwNotifyFilter – Any combination of FILE_NOTIFY_CHANGE_FILE_NAME, FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, or FILE_NOTIFY_CHANGE_SECURITY.
Returns:long The handle to the find change notification object or ERROR_INVALID_HANDLE if the attempt fails.
/** * Creates a change notification object for the given path. This notification object * allows the client to monitor changes to the directory and the subtree * under the directory using FindNextChangeNotification or * WaitForMultipleObjects. * * @param lpPathName The path to the directory to be monitored, cannot be <code>null</code>, * or be longer * than MAX_PATH. This path must be in platform bytes converted. * @param bWatchSubtree If <code>true</code>, specifies that the entire * tree under the given path should be monitored. If <code>false</code> * specifies that just the named path should be monitored. * @param dwNotifyFilter Any combination of FILE_NOTIFY_CHANGE_FILE_NAME, * FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, * FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, or * FILE_NOTIFY_CHANGE_SECURITY. * @return long The handle to the find change notification object or * ERROR_INVALID_HANDLE if the attempt fails. */
private static native long FindFirstChangeNotificationA(byte[] lpPathName, boolean bWatchSubtree, int dwNotifyFilter);
Stops and disposes of the change notification object that corresponds to the given handle. The handle cannot be used in future calls to FindNextChangeNotification or WaitForMultipleObjects
Params:
  • hChangeHandle – a handle which was created with FindFirstChangeNotification
Returns:boolean true if the method succeeds, false otherwise.
/** * Stops and disposes of the change notification object that corresponds to the given * handle. The handle cannot be used in future calls to FindNextChangeNotification or * WaitForMultipleObjects * * @param hChangeHandle a handle which was created with FindFirstChangeNotification * @return boolean <code>true</code> if the method succeeds, <code>false</code> * otherwise. */
public static native boolean FindCloseChangeNotification(long hChangeHandle);
Requests that the next change detected be signaled. This method should only be called after FindFirstChangeNotification or WaitForMultipleObjects. Once this method has been called on a given handle, further notification requests can be made through the WaitForMultipleObjects call.
Params:
  • hChangeHandle – a handle which was created with FindFirstChangeNotification
Returns:boolean true if the method succeeds, false otherwise.
/** * Requests that the next change detected be signaled. This method should only be * called after FindFirstChangeNotification or WaitForMultipleObjects. Once this * method has been called on a given handle, further notification requests can be made * through the WaitForMultipleObjects call. * @param hChangeHandle a handle which was created with FindFirstChangeNotification * @return boolean <code>true</code> if the method succeeds, <code>false</code> otherwise. */
public static native boolean FindNextChangeNotification(long hChangeHandle);
Returns when one of the following occurs.
  • One of the objects is signaled, when bWaitAll is false
  • All of the objects are signaled, when bWaitAll is true
  • The timeout interval of dwMilliseconds elapses.
Params:
  • nCount – The number of handles, cannot be greater than MAXIMUM_WAIT_OBJECTS.
  • lpHandles – The array of handles to objects to be waited upon cannot contain duplicate handles.
  • bWaitAll – If true requires all objects to be signaled before this method returns. If false, indicates that only one object need be signaled for this method to return.
  • dwMilliseconds – A timeout value in milliseconds. If zero, the function tests the objects and returns immediately. If INFINITE, the function will only return when the objects have been signaled.
Returns:int WAIT_TIMEOUT when the function times out before recieving a signal. WAIT_OBJECT_0 + n when a signal for the handle at index n. WAIT_FAILED when this function fails.
/** * Returns when one of the following occurs. * <ul> * <li>One of the objects is signaled, when bWaitAll is <code>false</code></li> * <li>All of the objects are signaled, when bWaitAll is <code>true</code></li> * <li>The timeout interval of dwMilliseconds elapses.</li> * </ul> * @param nCount The number of handles, cannot be greater than MAXIMUM_WAIT_OBJECTS. * @param lpHandles The array of handles to objects to be waited upon cannot contain * duplicate handles. * @param bWaitAll If <code>true</code> requires all objects to be signaled before this * method returns. If <code>false</code>, indicates that only one object need be * signaled for this method to return. * @param dwMilliseconds A timeout value in milliseconds. If zero, the function tests * the objects and returns immediately. If INFINITE, the function will only return * when the objects have been signaled. * @return int WAIT_TIMEOUT when the function times out before recieving a signal. * WAIT_OBJECT_0 + n when a signal for the handle at index n. WAIT_FAILED when this * function fails. */
public static native int WaitForMultipleObjects(int nCount, long[] lpHandles, boolean bWaitAll, int dwMilliseconds);
Answers true if the operating system supports long filenames.
Returns:boolean true if the operating system supports long filenames, false otherwise.
/** * Answers <code>true</code> if the operating system supports * long filenames. * @return boolean <code>true</code> if the operating system supports * long filenames, <code>false</code> otherwise. */
private static native boolean IsUnicode();
Answers the last error set in the current thread.
Returns:int the last error
/** * Answers the last error set in the current thread. * @return int the last error */
public static native int GetLastError();
Returns the constant FILE_NOTIFY_CHANGE_LAST_WRITE.
Returns:int
/** * Returns the constant FILE_NOTIFY_CHANGE_LAST_WRITE. * @return int */
private static native int FILE_NOTIFY_CHANGE_LAST_WRITE();
Returns the constant FILE_NOTIFY_CHANGE_DIR_NAME.
Returns:int
/** * Returns the constant FILE_NOTIFY_CHANGE_DIR_NAME. * @return int */
private static native int FILE_NOTIFY_CHANGE_DIR_NAME();
Returns the constant FILE_NOTIFY_CHANGE_ATTRIBUTES.
Returns:int
/** * Returns the constant FILE_NOTIFY_CHANGE_ATTRIBUTES. * @return int */
private static native int FILE_NOTIFY_CHANGE_ATTRIBUTES();
Returns the constant FILE_NOTIFY_CHANGE_SIZE.
Returns:int
/** * Returns the constant FILE_NOTIFY_CHANGE_SIZE. * @return int */
private static native int FILE_NOTIFY_CHANGE_SIZE();
Returns the constant FILE_NOTIFY_CHANGE_FILE_NAME.
Returns:int
/** * Returns the constant FILE_NOTIFY_CHANGE_FILE_NAME. * @return int */
private static native int FILE_NOTIFY_CHANGE_FILE_NAME();
Returns the constant FILE_NOTIFY_CHANGE_SECURITY.
Returns:int
/** * Returns the constant FILE_NOTIFY_CHANGE_SECURITY. * @return int */
private static native int FILE_NOTIFY_CHANGE_SECURITY();
Returns the constant MAXIMUM_WAIT_OBJECTS.
Returns:int
/** * Returns the constant MAXIMUM_WAIT_OBJECTS. * @return int */
private static native int MAXIMUM_WAIT_OBJECTS();
Returns the constant MAX_PATH.
Returns:int
/** * Returns the constant MAX_PATH. * @return int */
private static native int MAX_PATH();
Returns the constant INFINITE.
Returns:int
/** * Returns the constant INFINITE. * @return int */
private static native int INFINITE();
Returns the constant WAIT_OBJECT_0.
Returns:int
/** * Returns the constant WAIT_OBJECT_0. * @return int */
private static native int WAIT_OBJECT_0();
Returns the constant WAIT_ABANDONED_0.
Returns:int
/** * Returns the constant WAIT_ABANDONED_0. * @return int */
private static native int WAIT_ABANDONED_0();
Returns the constant WAIT_FAILED.
Returns:int
/** * Returns the constant WAIT_FAILED. * @return int */
private static native int WAIT_FAILED();
Returns the constant WAIT_TIMEOUT.
Returns:int
/** * Returns the constant WAIT_TIMEOUT. * @return int */
private static native int WAIT_TIMEOUT();
Returns the constant ERROR_INVALID_HANDLE.
Returns:int
/** * Returns the constant ERROR_INVALID_HANDLE. * @return int */
private static native int ERROR_INVALID_HANDLE();
Returns the constant ERROR_SUCCESS.
Returns:int
/** * Returns the constant ERROR_SUCCESS. * @return int */
private static native int ERROR_SUCCESS();
Returns the constant INVALID_HANDLE_VALUE.
Returns:long
/** * Returns the constant INVALID_HANDLE_VALUE. * @return long */
private static native long INVALID_HANDLE_VALUE(); }