Questions and answers regarding NetBalancer's application (also called agent) functionality.
NetBalancer App is a software application for monitoring and managing network traffic of a computer or a group of computers.
It shows you the network traffic on your computer and helps you to set limits, priorities and rules for that traffic.
This is a concept in NetBalancer that is used to delimit network traffic in 7 main categories:
  • Normal traffic - all the traffic that doesn't fall into the other 6 cathegories.
  • Limited traffic - traffic whose speed can't be higher than a set limit.
  • High priority traffic - traffic that has the highest priority when sent or received by your computer. This means that if, for example, Firefox and Download Manager are downloading simultaneously some files right now, and Firefox has a High priority set for its traffic (while Download Manager has just a Normal priority) then Firefox will download the files much faster then Download Manager.
  • Low priority traffic - traffic that has a network priority lower than both High and Normal.
  • Ignored - traffic that is completely ignored.
  • Dropped - traffic that is dropped with a set drop rate.
  • Delayed - traffic that is delayed.
  • Custom - traffic that can be delayed, dropped and/or limited at the same time.
Also:
  • Processes with a High priority will get more bandwidth than those with Normal or Low.
  • When there are no other processes with a higher priority using the network then processes with Low priorities will get all the bandwidth available
  • Limited, Ignored, Dropped and Delayed processes are excluded when calculating bandwidth of High, Normal or Low priority processes.
  • A Limited process will be just limited when it reaches the maximum allowed bandwidth, otherwise it will work as usual.
  • Dropped priorities, with a set Drop Rate, means that a part of their traffic will be dropped. For example if the drop rate is 40% then out of 100 network packets of a process about 40 of them will not reach their destination.
  • Blocked is the same as Drooped with 100% Drop Rate, but works faster and requires less CPU.
  • When a process has a Delayed priority then all its network packets are delayed with the set delay, in milliseconds. Usually this increases latency, and by a lesser factor decreases download/upload rates.
  • Ignored processes work without any management from NetBalancer.
  • The Custom priority is a useful feature for developers to simulate unstable and limited networks, similar to low quality wireless and satellite signals.
  • When 'Apply limits for each connection separately' is activated then the limits are applied per connection. For example if we set a download limit of 20KB/s to Firefox and activate the 'Apply limits..' option then every single connection of the dozens Firefox makes will be limited to 20KB/s, but in total Firefox will be able to donwload at a much higher rate.

Our recommendation is to set a High priority for your most important applications, and a Low priority for the less important. For example set for your streaming application a High priority, so you can watch and listen to the media without any interruptions or hiccups. And set the priority for uTorrent and Download Manager to low, so they won't interfere with your more important applications.

Then, after you are getting used with how NetBalancer works you can set more advanced settings using Limits and Rules.

The Rules are a more advanced method of setting priorities and limits for your traffic. While the basic functionality permits you to set priorities and limits on a per process basis, Rules can be set specifying the network adapter, remote or local IP and Port, network protocol, time and more.
The Filters are just like Rules with the difference that they work at the driver level, and apply to traffic before it enters NetBalancer. A good use for filters is performance optimizations: if there is in your system some critically important traffic that must fly through the wires at the maximum speed possible then set it with filters to be Ignored, so it will go directly to its destination avoiding NetBalancer's limits, priorities and rules, and hence not spending precious precious milliseconds.
Another useful scenario is blocking at the driver level; although Rules contain the block action too, they lack some Filters only parameters, like MAC address or EtherType protocol. And you can pipe the traffic from a filter to one or more specific rules using the Rule/FilterID field, for more advanced use case.
Yes, rules have the Time panel, where you can select the hours, day of week and/or month and set the appropriate priority for that traffic. You may want to create 2 (or more) rules, for each time period, with different settings.

Yes, add a rule for all your traffic with the traffic limited to, let say 128 kbps, and with the condition "Apply priority only when the traffic of this rule is more than 4GB in the last 1 Month". So when this rule will accumulate 4GB of traffic then all you computer speed will be limited to 128kbps.

Also you can add additional rules, for 4.5GB with a 64kbps limit or even for 5GB with traffic blocked to avoid overpay. Place the 4.5GB rule on top of the 4.GB, and the 5GB rule on top of all of them.

At the Traffic Chart, located on the bottom of NetBalancer's main window. Right click on it to change various settings or copy the viewed data to clipboard and paste it in a text or spreadsheet editor.
It is a tab where are shown all active connection on the current computer. If you select a specific process then the tab will show only that process' connection, if any. Right click on a connection to launch Ping, Trace or other tools on the connection's remote IP.
Run it from the command console as administrator:
NetBalancerSetup.exe /sp- /verysilent /norestart
We recommend to change NetBalancer's settings with NBCMD.exe after setup, but the setup also supports a few command line args:
/pwd= - sets the UI password
/priorities_file= - sets the global priorities file
/priorities_file_interval= - sets the global interval at which the priorities file will be re-read
/rules_file= - sets the global rules file
/rules_file_interval= - sets the global interval at which the rules file will be re-read
/serial= - activates NetBalancer during setup
/user_name= - sets the desired registration user name, that will be shown in About window
/components="agent,tray,ui" - select which components must be installed. Supported components are agent, ui and tray, comma separated. agent is the Windows service of NetBalancer App, it is mandatory, the App won't work without the agent. ui is App's main window, and tray is the tray icon and taskbar toolbar.
And because NetBalancer's setup file is built with Inno Setup, all Inno Setup's command line arguments are also supported.

The example below installs NetBalancer's agent only, silently, with no icons and with UI password "mypony123"
NetBalancerSetup.exe /sp- /verysilent /norestart /components="agent" /pwd=mypony123
NetBalancer keeps its settings in a couple of locations, depending on settings type:
  • In registry, at HKEY_CURRENT_USER\Software\SeriousBit\NetBalancer are kept the settings of the GUI and Tray apps.
  • The HKEY_USERS\Default\Software\SeriousBit\NetBalancer key contains the settings of NetBalancer's Windows service, except priorities, rules and traffic statistics, which are stored in XML files.
  • The rules are storred in C:\ProgramData\SeriousBit\NetBalancer\Rules.xml
  • Priorities are storred in C:\ProgramData\SeriousBit\NetBalancer\Priorities*.xml, where * is the ID of the network adapter, a number that can be negative.

Then there are also some files named C:\ProgramData\SeriousBit\NetBalancer\Traffic*.zip that contain various traffic stats.

The recommended way of changing these settings is via NBCMD.exe, however, if you want to modify them manually, you should first stop NetBalancer's service, named "NetBalancerService", otherwise it will replace your own settings on shutdown. After you changed the settings start back the service and NetBalancer will load them (it loads them only at start, and then keeps them in memory.)

Report it to us, click in NetBalancer Menu>Help>Report Bug, or please contact us via the Contact page
Ask us, and we'll answer to you directly and eventually add your question here too.
Questions and answers regarding NetBalancer Service's functionality.
It is a web service designed to remotely control one or more computer networks' traffic. More technically: the service can control a group of NetBalancer Apps.
The most common scenario is when the user installs NetBalancer on a couple or more computers and then finds out that it is quite inconvenient and time consuming to setup them and maintain. So the service solves this very problem: all you need to do is to sync all agents and then you can easely control them from service's control panel.
Almost all settigns and options from the Desktop app are available, and even some more, like charts, API and statistics.
From NetBalancer App's Menu>Edit>Cloud Sync.
We are still working on it, and going to release in a few months. The exact API's functionality will be published on release.
A machine and all related data is deleted automatically from our database after one month of inactivity. "One month of inactivity" means that a machine performed its last successful sync one month ago.
Also you can delete any machine or even your entire account and all related information manually from machine details or account settings pages.
We are constantly improving NetBalancer App and Service, just keep pressing F5 on our news page. :)
Information regarding NetBalancer's command line and options.
nbcmd.exe (NetBalancer Command) is a command line tool that permits to execute various specialized commands and automate NetBalancer application from scripts or programs to programmatically control network traffic. Basically NBCMD offers the same management functionality as NetBalancer's UI, and we plan in the nearest future to add also the monitoring part.
When executed from command line NBCMD.exe will show a list of all available commands and sub-commands with a short summary. Below is an example of the first few lines of NBCMD's output (as it was at the moment of writing of this help):
> nbcmd.exe
application|a - shows information about NetBalancer activate|a <name> <code> - activate NetBalancer deactivate|d - deactivate NetBalancer update|u [timeout=10] [force] - check for new version and update service|s - show NetBalancer Service running status start|s - start NetBalancer Service stop|p - stop NetBalancer Service restart|r - restart NetBalancer Service settings|t - settings info logs|l <true|false> - log errors to system events log latency|y [ms] - set preferred latency security|u <old pass><new pass> - set a new password ...<CONTINUES>...
The first four lines of the output say that application is a command with no parameters but with 2 sub-commands activate and update, one of which (activate) has its own sub-command deactivate. Sub-command activate has 2 required parameters name and code, while update has two optional parameters timeout and force, and timeout has a default value of 10 when not specified. We'll describe all commands and sub-commands in more details further below.

To call application we must write the following command from command line:

nbcmd.exe application

or, alternatively we can use use the mnemonic:

nbcmd.exe a

Usually the mnemonic is command names's first letter, with a few exceptions. The mnemonics are shown immediately after command name:

application|a

Sub-commands are called using all preceding commands names:

nbcmd.exe application service start

or with mnemonics:

nbcmd.exe ass

All parameters are space delimited, if a complex parameter that contains spaces needs to be specified then use quotes "":

nbcmd.exe command_name parameter1 "complex parameter 2" parameter3

Parameters can be of several types:

<parameter> - required parameter
[parameter] - optional parameter
[parameter=10] - optional parameter with a default value of 10 when not specified.
<val1|val2> - un-named parameter that can accept only val1 or val2 as values. For example <true|false>
<down true|false> - parameter named down that accepts only true or false values.
<par1 par2="" ...=""> - parameter that can accept multiple values delimited by spaces

When NetBalancer App is protected with a password (Menu>Edit>Settings>Security) then the spacial pwd parameter must be specified:

nbcmd.exe pwd:my_supper_pass command_name parameter1 parameter2
application - show general information about NetBalancer, like version, service status and some other.

application activate <name> <code> - activate NetBalancer using the supplied user's full name and activation code.

nbcmd.exe activate "John Doe" 123456890

application activate deactivate - deactivate NetBalancer, i.e. remove current activation from NetBalancer.

application update [timeout=10] [force] - verify for new version availability online and if there is a new version then update NetBalancer. [timeout=10] sets the maximum amount of minutes to wait for NetBalancer setup to be downloaded, after which nbcmd.exe will exit with a timeout error. if [force] is specified then NetBalancer will be updated without version verification:
> nbcmd.exe application update 10 force
Downloading setup to 'C:\cygwin\tmp\NetBalancerSetup.exe' Downloaded 16,1 KB, 0% Downloaded 376,5 KB, 13% Downloaded 1,3 MB, 45% Downloaded 2,0 MB, 72% Downloaded 2,5 MB, 89% Downloaded 2,8 MB, 100% Download completed, installing...
application service - show if NetBalancer's Windows service is running or not.

application service start - start NetBalancer's Windows service.
application service stop - stop NetBalancer's Windows service.
application service restart - stop then start NetBalancer's Windows service.

settings - show NetBalancer's current settings (one setting per line) in form of name and value delimited by a : sequence:
> nbcmd.exe settings
[Network adapters] Monitor adapter 1. 'Ethernet': True Monitor adapter 3. 'Local Area Connection': True [Severity] Level severity: 50 Severity multiplier: 5 [System] Log error to system event log: True [Bandwidth] Recalculate bandwidth: True Recalculate bandwidth every: 60 minutes [System traffic] System traffic download is limited: False System traffic download limit: 0 ...<CONTINUES>...
settings logs <true|false> - if set to true then NetBalancer will log its errors to system events log

settings latency [ms=0] - set traffic induced latency in milliseconds, with default value 0 ms.

settings password <old pwd> <new pwd> - set a new password for NetBalancer UI

settings adapters - show all currently installed network adapters

settings adapters monitor <adapter nr> <true|false> - enable monitoring for a network adapter. <adapter nr> is the order number of the adapter as shown by command "settings adapters". <true> will set adapter to be monitored, <false> will stop adapter for being monitored.

settings traffic - shows the settings for bandwidth recalculation and system traffic limit.

settings traffic bandwidth <true|false> [minutes] - edit bandwidth recalculation settings, enables recalculation if <true> and sets the recalculation interval to the value of [minutes] when specified.

settings traffic limit <down true|false> <up true|false> [down val] [up val] - edit system traffic limit, [down val] and [up val] are numbers that specify the value in bytes/s of download and respectively upload limit. For example nbcmd.exe settings traffic limit true true 100000 50000 will limit system traffic to a maximum of 100 KB/s download and 50 KB/s upload speeds.

settings priorities - show current default priority and ACK packets settings.

settings priorities ack <true|false> - enable or disable high priority for ACK packets.

settings priorities severity <value> [multiplier=5] - set severity level value and optional multiplier.

settings priorities default <down priority> <up priority> [down val] [up val] [per connection <true|false>] - set the default priority, <down priority> and <up priority> are download and respectively upload priority and can accept values Low, Normal, High, Blocked, Ignored, Limited, Delayed, or Dropped. The optional [down val] and [up val] are required only when the selected priority is eighter Limited, Delayed or Dropped, in these cases the values set the limit in bytes/s, the delay in milliseconds, or the drop rate in float values from 0.0 to 1.0. Option [per connection <true|false>] can get only true or false values and sets the "Limit per connection" setting.

settings priorities edit - <exe path> <down priority> <up priority> [down val] [up val] [per conn.=false] - edit the priority of an executable. <exe path> is the full path of the executable file. All other options are the same as for "settings priorities default" command.

settings files - show settings of "Global priorities file" and "Global rules file" settings.

settings files priorities <true|false> <interval> <path> - edit the options of the global priorities file settings, <true|false> sets if the setting is enabled, <interval> edits load interval in minutes, <path> sets the full path to the file.

settings files priorities load <path> - replace all current priorities with the ones from the file located at <path>.

settings files rules <true|false> <interval> <path> - edit the options of the global rules file settings, the parameters have the same meaning as at "settings files priorities" command.

settings files rules load <path> - load rules from a file located at <path>.

settings reset - reset all settings, including priorities, rules and filters.

settings reset priorities - reset priorities only.

sync <true|false> - enable or disable sync.

sync account <username> <password> - set the username and password for sync, this is the registration username on our website.

sync interval <seconds> - edit the interval at which NetBalancer syncs with the service, in seconds. Value 180 is recommended.

sync alerts <true|false> - show alerts to user when sync is offline.

sync maxevents <value> - set the maximum number of network events that NetBalancer will store in memory when offline.

sync events <true|false> - enable or disable all network events reporting.

sync events connections <true|false> - enable or disable connections events reporting.

sync events XXX <true|false> - enable or disable XXX events reporting, where XXX is not porn but processes, icons, priorities etc.

sync traffic <true|false> - enable all traffic reporting.

sync servers [serv1 serv2 ...] - change sync servers list to serv1, serv2, etc. where serv1, serv2 are the IP addresses of the new servers

sync now - tell NetBalancer Windows service to synchronize right now, to send all data and receive eventual commands.

sync id_change <true|false> - change sync ID when machine name changes.

interactive - this starts an interactive session of NBCMD.

sync commands console <true|false> - accept console commands from sync service.

sync commands admin <true|false> - accept admin commands.

sync commands shutdown <true|false> - accept shutdown/restart user machine.

sync commands password <true|false> - accept password changes from sync.

sync commands updates <true|false> - accept update commands from sync.

Information regarding NetBalancer's API and usage examples.
NetBalancer Service provides a REST based API for sync automation. It can be used with any programming language that can access HTML pages, i.e. any modern programming langauge. All API access is over HTTPS, and accessed from the netbalancer.com/api page.
The current version of API can be read with a GET request from /api/version
> curl -i https://netbalancer.com/api/version
HTTP/1.1 200 OK Date: Tue, 04 Feb 2014 13:32:24 GMT Content-Type: application/json; charset=utf-8 { "api_version": "1.1.0" }
All data is sent and received as JSON.
Blank fields are included as null instead of being omitted.
All timestamps are returned in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ All traffic values are in bytes and all traffic rate values are in bytes/second.
For GET requests, any parameters not specified as a segment in the path can be passed as an HTTP query string parameter:
> curl -i https://netbalancer.com/api/machines/5F843BF3-D21B-4DE9-A067-B73AC576CB4B/urls?max=20
In this example the "5F843BF3-D21B-4DE9-A067-B73AC576CB4B" is provided for the machineId parameter in the path while max is passed in the query string.

For POST, PATCH, PUT, and DELETE requests, parameters not included in the URL should be encoded as JSON with a Content-Type of 'application/x-www-form-urlencoded':

curl -i -u username -d '{ "name":"DarkLord", "code":1234}' https://netbalancer.com/api/machines/5F843BF3-D21B-4DE9-A067-B73AC576CB4B/activate"
There are three possible types of client errors on API calls:

1. Sending invalid JSON in request body will result in a 400 Bad Request response.
> 400 Bad Request
HTTP/1.1 400 Bad Request Content-Length: 35 {"message":"Problems parsing JSON"}
2. Sending the wrong type of JSON values in request body will result in a 400 Bad Request response.
> 400 Bad Request
HTTP/1.1 400 Bad Request Content-Length: 40 {"message":"Body should be a JSON Hash"}
3. Sending invalid fields will result in a 422 Unprocessable Entity response.
> 422 Unprocessable Entity
HTTP/1.1 422 Unprocessable Entity Content-Length: 149 { "message": "Validation Failed", "errors": [ { "field": "name", "code": "missing_field" } ] }
All error objects have resource and field properties so that your client can tell what the problem is. There’s also an error code to let you know what is wrong with the field. These are the possible validation error codes:

missing - This means a resource does not exist.
missing_field - This means a required field on a resource has not been set.
invalid - This means the formatting of a field is invalid. The documentation for that resource should be able to give you more specific information.
already_exists - This means another resource has the same value as this field. This can happen in resources that must have some unique key (such as Label names).
NetBalancer REST API currently supports only Basic Authentication, requests that require authentication will return 403 Forbidden.
> curl -u "username" https://netbalancer.com/api/machines
Authenticating with invalid credentials will return 401 Unauthorized:
> curl -i https://netbalancer.com/api/machines -u foo:bar
HTTP/1.1 401 Unauthorized { "message": "Bad credentials", "documentation_url": "https://netbalancer.com/docs#api_overview" }
After detecting several requests with invalid credentials within a short period, the API will temporarily reject all authentication attempts for that user (including ones with valid credentials) with 403 Forbidden:
> curl -i https://netbalancer.com/api/machines -u username:password
HTTP/1.1 403 Forbidden { "message": "Maximum number of login attempts exceeded. Please try again later.", "documentation_url": "https://netbalancer.com/docs#api_overview" }
For requests using Basic Authentication you can make up to 5,000 requests per hour. For unauthenticated requests, the rate limit allows you to make up to 60 requests per hour. You can check the returned HTTP headers of any API request to see your current rate limit status:
> curl -i https://netbalancer.com/api/version
HTTP/1.1 200 OK Date: Mon, 01 Jul 2013 17:27:06 GMT Status: 200 OK X-RateLimit-Limit: 60 X-RateLimit-Remaining: 56 X-RateLimit-Reset: 1372700873
The headers tell you everything you need to know about your current rate limit status:

X-RateLimit-Limit - The maximum number of requests that the consumer is permitted to make per hour.
X-RateLimit-Remaining - The number of requests remaining in the current rate limit window.
X-RateLimit-Reset - The time at which the current rate limit window resets in UTC epoch seconds.

Once you go over the rate limit you will receive an error response:
> HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden Date: Tue, 20 Aug 2013 14:50:41 GMT Status: 403 Forbidden X-RateLimit-Limit: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1377013266 { "message": "API rate limit exceeded. See https://netbalancer.com/docs#api_overview for details." }
Most responses return an ETag header. You can use the value of this header to make subsequent requests to those resources using the If-None-Match header. If the resource has not changed, the server will return a 304 Not Modified. Also note: making a conditional request and receiving a 304 response does not count against your Rate Limit, so we encourage you to use it whenever possible.
> curl -iH 'User-Agent: ' https://netbalancer.com/api/machines
HTTP/1.0 403 Forbidden Content-Type: text/html Request forbidden by administrative rules. Please make sure your request has a User-Agent header. Check https://netbalancer.com/docs#api_overview for other possible causes." }
All API requests MUST include a valid User-Agent header. Requests with no User-Agent header will be rejected. We request that you use your NetBalancer username, or the name of your application, for the User-Agent header value. This allows us to contact you if there are problems.

Here’s an example:
User-Agent: Awesome-NetBalancer-User

If you provide an invalid User-Agent header, you will receive a 403 Forbidden response:
> curl -iH 'User-Agent: ' https://netbalancer.com/api/machines
HTTP/1.0 403 Forbidden Content-Type: text/html Request forbidden by administrative rules. Please make sure your request has a User-Agent header. Check https://netbalancer.com/docs#api_overview for other possible causes." }
Full list of all API methods with examples.
The current version of API can be read with a GET request from /api/version. This method does not require authentication.
> GET /api/version
HTTP/1.1 200 OK { "api_version": "1.0.0" }
You can request a specific version of the API via the Accept header:
curl -i --header "Accept: v1" https://netbalancer.com/api/version
Returns a list of all user's machines, where "name" is machine's current network name, "id" is a Guid assigned by NetBalancer and "is_favorite" shows if user has marked the machine as favorite.
> GET /api/machines
HTTP/1.1 200 OK { "Machines": [ { "name": "MACWIN8", "id":"531b83ce-757f-4164-8d17-5bf58784a6b5", "is_favorite":false }, { "name":"MACWIN9", "id":"220282ae-6dea-4209-b695-b869aa298f9b", "is_favorite":true } ] }
Returns dashboard info for a machine. :id is machine's Id, can be read whith GET /api/machines.
> GET /machines/:id
HTTP/1.1 200 OK { "os": "Microsoft Windows 8.1 Pro", "os_bits": 64, "processes": 74, "connections": 56, "downloaded": 211584, "download_rate": 0, "uploaded": 246558, "upload_rate": 0, "ip": "178.168.41.125", "last_online": "2013-10-16T11:56:59.739Z", "is_favorite": false }
Get current traffic rules of a machine.
> GET /machines/:id/rules
HTTP/1.1 200 OK { "rules": [ { "name": "New Rule 1", "adapter_id": null, "process_name": "winamp", "command_line" : "", "process_id": "", "filter_id": "", "local_endpoint": "", "local_port": "", "remote_endpoint": "", "remote_port": "", "protocol": null, "priority": { "download_priority": "normal", "upload_priority": "normal", "download_limit": 30000, "upload_limit": 30000, "download_delay": 0, "upload_delay": 0, "download_drop_rate": 0.0, "upload_drop_rate": 0.0, "download_delay_jitter": 0, "upload_delay_jitter": 0, "per_connection_limits": false }, "time": null, "day_week": null, "day_month": null, "month": null, "condition": { "enabled": false, "more_than": true, "quantity": 1000000000, "unit": "GB", "sent": null, "time": 1, "time_unit": "month" }, "url": null, "enabled": true, "ssid": "", "user": "SYSTEM", "country_code": "US, UK, MD" } ] }
Get traffic filters of a machine.
> GET /machines/:id/filters
HTTP/1.1 200 OK { "filters": [ { "adapter": null, "direction": 3, "action": 1, "ethernet_filter": null, "network_filter": { "src_address": "10.0.0.0 - 10.255.255.255", "src_mask": null, "dest_address": "10.0.0.0 - 10.255.255.255", "dest_mask": null, "protocol": null }, "transport_filter": null, "name": "Local Network Range #1", "enabled": true, "time": null, "day_week": null, "day_month": null, "month": null }, { "adapter": null, "direction": 3, "action": 1, "ethernet_filter": null, "network_filter": { "src_address": "169.254.0.0 - 169.254.255.255", "src_mask": null, "dest_address": "169.254.0.0 - 169.254.255.255", "dest_mask": null, "protocol": null }, "transport_filter": null, "name": "Local Network Range #2", "enabled": true, "time": null, "day_week": null, "day_month": null, "month": null } ] }
Get running processes on a machine.
> GET /machines/:id/processes
HTTP/1.1 200 OK { "processes": [ { "id": "6221a141-5c7f-436a-8ef5-72f8a8356ea3", "pid": 396, "name": "csrss.exe", "path": "csrss.exe [Unknown]", "download": 0, "upload": 0, "connection": 0, "download_delay": 0, "download_drop_rate": 0.0, "download_limit": 30000, "download_priority": "normal", "upload_delay": 0, "upload_drop_rate": 0.0, "upload_limit": 30000, "upload_priority": "normal", "download_delay_jitter": 0, "upload_delay_jitter": 0, "per_connection_limits": false }, { "id": "7b15f874-1cb2-45a1-b7b2-e16ca0ef54fe", "pid": 0, "name": "System Idle Process", "path": "System Idle Process [Unknown]", "download": 0, "upload": 0, "connection": 0, "download_delay": 0, "download_drop_rate": 0.0, "download_limit": 30000, "download_priority": "normal", "upload_delay": 0, "upload_drop_rate": 0.0, "upload_limit": 30000, "upload_priority": "normal", "download_delay_jitter": 0, "upload_delay_jitter": 0, "per_connection_limits": false } ] }
Returns the traffic history of a machine with 1 second resolution. time is in UTC epoch seconds, download and upload are in bytes.
> GET /machines/:id/traffic/seconds
HTTP/1.1 200 OK { "traffic": [ { "time": 1391677345000, "download": 383732, "upload": 45345 }, { "time": 1391677355000, "download": 0, "upload": 453 }, { "time": 1391677365000, "download": 732, "upload": 0 }, { "time": 1391677375000, "download": 37, "upload": 45 }, ] }
Same as above: returns traffic history in minutes, hours and respectively days in the same format.

GET /machines/:id/traffic/minutes
GET /machines/:id/traffic/hours
GET /machines/:id/traffic/days
Gets a list of last visited URLs on a machine.
> GET /api/machines/:id/urls
HTTP/1.1 200 OK { "urls": [ { "address": "mscrl.microsoft.com/pki/mscorp/crl/mswww(6).crl", "time": 1381923815994 }, { "address": "ubuntu.com", "time": 1381923815687 }, { "address": "apple.com", "time": 1381923477129 } ] }
Returns the current settings of NetBalancer on that machine.
> GET /api/machines/:id/settings
HTTP/1.1 200 OK { "log_errors_to_system_events_log": true, "check_bandwidth": true, "bandwidth_limit": 0.78, "bandwidth_recalculate": true, "bandwidth_recalculate_interval": 3600000, "limit_multiple_instances_as_one": false, "limit_download_traffic": false, "download_traffic_limit": 100000, "limit_upload_traffic": false, "upload_traffic_limit": 100000, "high_priority_for_ack": false, "preferred_latency": 5, "fast_traffic_detection": true, "download_delay": 0, "download_drop_rate": 0.0, "download_limit": 30000, "download_priority": "normal", "download_delay_jitter": 0, "per_connection_limits": false, "upload_delay": 0, "upload_drop_rate": 0.0, "upload_limit": 30000, "upload_priority": "normal", "upload_delay_jitter": 0, "count_ignored_processes_traffic": false, "level_severity": 50, "severity_multiplier": 1, "rules_first": true }
Gets current Sync settings of a machine. sync_frequency is in seconds, sync_timeout is in milliseconds.
> GET /api/machines/:id/settings/sync
HTTP/1.1 200 OK { "sync_frequency": 10, "max_events": 1000000, "is_sync_enabled": true, "is_reporting_connections": true, "is_reporting_loopback_connections": false, "is_reporting_processes": true, "is_reporting_icons": true, "is_reporting_priorities": true, "is_reporting_rules": true, "is_reporting_filters": true, "is_reporting_urls": true, "is_reporting_cpu_load_per_process": true, "is_reporting_system_info": true, "is_reporting_internal_ip": true, "is_reporting_external_ip": true, "is_reporting_connections_traffic": true, "is_reporting_processes_traffic": true, "is_reporting_rules_traffic": true, "is_reporting_filters_traffic": true, "is_reporting_protocols_traffic": true, "is_reporting_sys_event_log": true, "accept_admin_commands": true, "accept_console_commands": true, "accept_shutdown_commands": true, "accept_password_changes_command": true, "accept_automatic_updates_command": true, "change_id_when_machine_name_changes": true, "sync_timeout": 60000 }
Checks whether Traffic Inspector is currently enabled for that machine or not.
> GET /api/machines/:id/inspector
HTTP/1.1 200 OK { "enabled": false }
To sets a new set of filters on a machine use the PUT HTTP verb:
> PUT /api/machines/:id/filters
INPUT DATA: { filters: [ { adapter: 341, direction: "all", action: "block", ethernet_filter: { src_mac: "123456789ABC", dest_mac: "00A0C914C829", protocol: 0xCAFE }, network_filter: { src_address: "80.68.3.4", src_mask: "255.243.3.4", dest_address: "192.168.1.2", dest_mask: "255.255.255.200", protocol: 70 }, transport_filter: { src_port_range: [ 30, 3433 ], dest_port_range: [ 10, 1000 ] }, name: "test filter 1", enabled: true, time: [ 60, 360 ], day_week: [ true, false, false, true, true, false, false ], day_month: [ true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true ], month: [ false, true, false, false, false, false, false, true, true, false, false, true ] } ] }
Sets a new set of rules.
> PUT /api/machines/:id/rules
INPUT DATA: { rules: [ { name: "rule test 1", adapter_id: 54321, process_name: "skype.exe", command_line: "--debug", process_id: "9001", filter_id: "287628276287", local_endpoint: "192.168.2.1", local_port: "8082", remote_endpoint: "skype.com", remote_port: "928", protocol: 54, priority: { download_priority: "high", upload_priority: "low", download_limit: 23849, upload_limit: 32223, download_delay: 10, upload_delay: 45, download_drop_rate: 0.34, upload_drop_rate: 0.64, download_delay_jitter: 20, upload_delay_jitter: 53, per_connection_limits: true }, time: [ 60, 360 ], day_week: [ true, false, false, true, true, false, false ], day_month: [ true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, true, true, true, true, true, true, true, true ], month: [ false, true, false, false, false, false, false, true, true, false, false, true ], condition: { enabled: true, more_than: true, quantity: 192727, unit: "byte", sent: true, time: 3, time_unit: "hour" }, url: "http: \\netbalancer.com", enabled: true, ssid: "23446", user: "test_user" }, { name: "rule test 2", adapter_id: null, process_name: "winamp.exe", command_line:"", process_id: "9023", filter_id: "", local_endpoint: "192.168.2.1", local_port: "8565", remote_endpoint: "92.23.34.22", remote_port: "9265", protocol: null, priority: { download_priority: "dropped", upload_priority: "ignored", download_limit: 23841, upload_limit: 32123, download_delay: 13, upload_delay: 42, download_drop_rate: 0.32, upload_drop_rate: 0.64, download_delay_jitter: 23, upload_delay_jitter: 52, per_connection_limits: true }, time: [ 10, 320 ], day_week: [ true, true, false, true, false, false, true ], day_month: [ false, false, true, false, true, false, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true, true, true, false, false, true, true, true, false ], month: [ false, true, true, true, false, false, true, true, true, false, false, true ], condition: { enabled: true, more_than: false, quantity: 192727, unit: "Byte", sent: null, time: 3, time_unit: "hour" }, url: "http: \\example.com", enabled: true, ssid: "23446", user: "test_user", "country_code": "US, UK, MD", block_lists: [ 'afe76670-5b67-d2ad-6b77-1160d0ba1df5', 'ffc721b6-d040-eec6-cfb8-36afd6daeab4', 'b46d7dab-a78e-c50a-cb14-9e6ff0fe4f71' ] } ] }
Sets a new priority for an executable.
> PUT /api/machines/:id/priority
INPUT DATA: { priority: { executable_path: "c: \\test\\winamp.exe", download_limit: 23849, download_delay: 12, download_delay_jitter: 22, download_drop_rate: 0.34, download_priority: "high", upload_limit: 32223, upload_delay: 45, upload_delay_jitter: 53, upload_drop_rate: 0.64, upload_priority: "low", per_connection_limits: true } }
Enables or disables traffic inspector on a single machine.
> PUT /api/machines/:id/inspector
INPUT DATA: { enabled : true }
Activates a machine with an activation (license) code.
> PUT /api/machines/:id/activate
INPUT DATA: { name : "Anton Carton", code: "398423097420" }
Set a password for NetBalancer App UI, if the password string is empty then it will remove it.
> PUT /api/machines/:id/password
INPUT DATA: { new_password : 'password123' }
Edits the settings of a machine.
> PUT /api/machines/:id/settings
INPUT DATA: { settings: { log_errors_to_system_events_log: false, check_bandwidth: true, bandwidth_limit: 123.0, bandwidth_recalculate: false, bandwidth_recalculate_interval: 10, limit_multiple_instances_as_one: true, limit_download_traffic: true, download_traffic_limit: 50, limit_upload_traffic: false, upload_traffic_limit: 35, high_priority_for_ack: true, preferred_latency: 50, fast_traffic_detection: true, download_delay: 10, download_drop_rate: 0.34, download_limit: 23849, download_priority: 'high', download_delay_jitter: 20, per_connection_limits: true, upload_delay: 45, upload_drop_rate: 0.64, upload_limit: 32223, upload_priority: 'low', upload_delay_jitter: 53, count_ignored_processes_traffic: false, level_severity: 51, severity_multiplier: 3, rules_first: false } }
> PUT /api/machines/:id/settings/sync
INPUT DATA: { sync_settings: { sync_frequency: 60, max_events: 10, is_sync_enabled: true, is_reporting_connections: false, is_reporting_processes: false, is_reporting_icons: false, is_reporting_priorities: false, is_reporting_rules: false, is_reporting_filters: false, is_reporting_urls: true, is_reporting_cpu_load_per_process: true, is_reporting_system_info: false, is_reporting_internal_ip: true, is_reporting_external_ip: false, is_reporting_connections_traffic: true, is_reporting_processes_traffic: true, is_reporting_rules_traffic: true, is_reporting_filters_traffic: true, is_reporting_protocols_traffic: true, is_reporting_sys_event_log: true, accept_admin_commands: false, accept_console_commands: true, accept_shutdown_commands: true, accept_password_changes_command: true, accept_automatic_updates_command: false, change_id_when_machine_name_changes: false, sync_timeout: 15 } }
Sends a Shutdown command to a machine. The command will be executed on next machine sync.
> PUT /api/machines/:id/commands/shutdown
Send an list of commands to NBCMD.exe on a machine, which will executed in sent order.
> PUT /api/machines/:id/commands/admin
INPUT DATA: { commands : [ "sync now" "application service stop" "application update", "application service start' ] }
To delete a machine and all related data, including traffic history, use DELETE verb with the path below.
> DELETE /api/machines/:id/
Resets all custom priorities to the default priority, usually Normal/Normal.
> DELETE /api/machines/:id/priorities
Deletes all currently queued commands, including admin commands, edit setting commands, edit sync commands, reboots etc.
> DELETE /api/machines/:id/commands
> GET /api/account
HTTP/1.1 200 OK { "email":"test@example.com", "name":null, "company":null, "is_bit_preferred":true, "accept_promotions":true, "accept_product_updates":true, "accept_important_emails":true, "last_login_ip": "192.168.1.101", "last_login_time": "2014-01-24T08:57:17.614Z" }
Changes the password of netbalancer.com web account.
> PUT /api/user/password
{ new_password : "1234567890" }
Changes company name if the account.
> PUT /api/machines/:id/
{ company: "SeriousBit" }
The change yoru email preferences use one of the following API calls:

PUT /api/account/email/promotions
PUT /api/account/email/updates
PUT /api/account/email/important
> PUT /account/email/promotions
{ "enabled": false }
Deletes your account and related data, including machines, commands, settings, traffic history, etc.
> DELETE /api/account
To get machine specific statistics use one of the API calls below with a GET request:

/api/machines/:id/statistics/processes/day
/api/machines/:id/statistics/processes/week
/api/machines/:id/statistics/processes/month
/api/machines/:id/statistics/ips/day
/api/machines/:id/statistics/ips/week
/api/machines/:id/statistics/ips/month
/api/machines/:id/statistics/websites/day
/api/machines/:id/statistics/websites/week
/api/machines/:id/statistics/websites/month


Similarily for aggregate statistics:

/api/statistics/processes/day
/api/statistics/processes/week
/api/statistics/processes/month
/api/statistics/ips/day
/api/statistics/ips/week
/api/statistics/ips/month
/api/statistics/websites/day
/api/statistics/websites/week
/api/statistics/websites/month
> GET /machines/:id/statistics/processes/day
HTTP/1.1 200 OK { "processes": [ { "executable": "System Idle Process [Unknown]", "downloaded": 60, "uploaded": 42 }, { "executable": "C:\\wrk\\netbalancer2\\deskapp\\src\\SeriousBit.NetBalancer.UI\\bin\\Debug\\SeriousBit.NetBalancer.UI.exe", "downloaded": 66, "uploaded": 297 } ] }
> GET /machines/:id/statistics/ips/day
HTTP/1.1 200 OK { "ips": [ { "ip": "192.168.1.1", "downloaded": 60, "uploaded": 42 }, { "ip": "192.168.1.2", "downloaded": 66, "uploaded": 297 } ] }
> GET /machines/:id/statistics/websites/day
HTTP/1.1 200 OK { "urls": [ { "url": "http://example.com", "downloaded": 60, "uploaded": 42 }, { "url": "http://seriousbit.com", "downloaded": 66, "uploaded": 297 } ] }
> PUT /api/log
HTTP/1.1 200 OK { "log": [ { "id": "b626387d-87a4-47c3-918d-9c82f4dc2c43", "machine_id": "00000000-0000-0000-0000-000000000000", "time": "2014-02-05T08:41:25.393Z", "message": "Attempt to log into web account, ip ::1", "priority": "critical" }, { "id": "8111d793-8ee8-4ef3-9774-2f161d062024", "machine_id": "00000000-0000-0000-0000-000000000000", "time": "2014-02-05T08:41:20.292Z", "message": "User logged out of web account", "priority": "normal" }, { "id": "1390e1b6-c58d-48f7-aeef-896e0a476d02", "machine_id": "93b77c42-d637-4881-8af4-3f22062697dc", "time": "2014-01-29T13:43:44.645Z", "message": "Commands \"icon request\" sent to MACWIN8", "priority": "normal" } ] }
Returns detailed information about this machine's OS and sowftare configuration.
> PUT /api/machines/:id/software
HTTP/1.1 200 OK { "system_bootup_state": "Normal boot", "system_daylight_in_effect": true, "system_vendor": "Acer", "system_infrared_supported": true, "system_processors_count": 1, "system_domain": "WORKGROUP", "system_is_domain": false, "system_owner": "rsologub", "system_description": "AT/AT COMPATIBLE", "system_type": "x64-based PC", "memory_installed": 1073741824, "memory_capacity": 4294967296, "proc_version": "Model 4, Stepping 2", "proc_manufacturer": "AuthenticAMD", "proc_id": "078BFBFF00020F42", "proc_type": 3, "proc_description": "AMD64 Family 15 Model 36 Stepping 2", "proc_status": "OK", "proc_ext_clock": 800, "proc_current_clock_speed": 1800, "proc_name": "AMD Turion(tm) 64 Mobile Technology ML-34", "os_organization": "", "os_serial_number": "00426-OEM-8992662-00400", "os_csd_number": "Service Pack 1", "os_registered_user": "rsologub", "os_install_date": "2012-11-06T00:00:00Z", "os_directory": "C:\\Windows", "os_code_set": 1251, "os_system_directory": "C:\\Windows\\system32", "os_suite_mask": 272, "os_build_number": 7601, "os_version": "6.1.7601", "os_name": "Microsoft Windows 7 Ultimate " }
Returns detailed information about this machine's hardware devices and configuration.
> PUT /api/machines/:id/hardware
HTTP/1.1 200 OK { "processors": [ { "id": 33562629, "name": "AMD Turion 64 ML-34", "logo_name": "amd_turion64", "code_name": "Lancaster", "package": "Socket 754", "technology": 90.5, "technology_unit": "nm", "core_voltage": -1.0, "specification": "AMD Turion(tm) 64 Mobile Technology ML-34", "family": 15, "model": 4, "stepping": 2, "ext_family": 15, "ext_model": 36, "revision": "SH8-E5", "instructions": [ "MMX Ext", "3DNow! Ext", "SSE", "SSE2", "SSE3", "x86-64", "NX" ], "cores": [ { "number": 0, "speed": 799.05, "multiplier": 4.0, "temp_sensor": null } ], "bus_speed": 200.0, "qpi_link": 800.0, "max_cache_level": 2, "caches": [ { "size": 64, "count": 1, "level": 1, "ways": 2, "line_size": 64, "type": "Data" }, { "size": 64, "count": 1, "level": 1, "ways": 2, "line_size": 64, "type": "Instructions" }, { "size": 1024, "count": 1, "level": 2, "ways": 16, "line_size": 64, "type": "Unified" } ], "threads": 1, "ht_supported": false, "ht_enabled": false, "vt_supported": false, "vt_enabled": false, "stock_clock_frequency": 1800, "stock_bus_frequency": 200, "manufacturer": "Unknown" } ], "mainboard": { "manufacturer": "Acer", "model": "Aspire 5020", "model_rev": "Rev.A", "serial_number": "LXA4605061542063C2KS00", "chipset_manufacturer": "ATI", "chipset": "Xpress 200 (RS480)", "chipset_rev": "01", "southbridge_manufacturer": "ATI", "southbridge": "SB400 Rev. 00", "bios": "Phoenix", "bios_version": "V1.13", "bios_date": "09/09/2005", "graphic_version": "PCI-Express", "graphic_link_width": -1 }, "memory": { "type": "DDR", "channels": 1, "size": 1024, "dram_frequency": 160.0, "cas_latency": 2.5, "ras_to_cas_delay": 3, "ras_precharge": 3, "cycle_time": 7, "command_rate": 2, "row_to_column": 10 }, "spds": [ { "memory_type": "DDR", "module_size": 512, "max_bandwidth": "PC2700(166 MHz)", "manufacturer": "Siemens AG", "part_number": "SDN06464O2B32MT-60", "serial_number": "09205617", "week": 55, "year": 3, "timming_tables": [ { "frequency": 133, "cas_latency": 2, "ras_to_cas": 3, "ras_precharge": 3, "t_ras": 6, "trc": 0, "command_rate": 0, "voltage": 2.5 }, { "frequency": 166, "cas_latency": 2, "ras_to_cas": 3, "ras_precharge": 3, "t_ras": 7, "trc": 0, "command_rate": 0, "voltage": 2.5 } ] }, { "memory_type": "DDR", "module_size": 512, "max_bandwidth": "PC2700(166 MHz)", "manufacturer": "Corsair", "part_number": "VS512SDS333 ", "serial_number": "00000000", "week": 0, "year": 0, "timming_tables": [ { "frequency": 166, "cas_latency": 2, "ras_to_cas": 3, "ras_precharge": 3, "t_ras": 7, "trc": 0, "command_rate": 0, "voltage": 2.5 } ] } ], "graphic_cards": [ { "name": "Intel(R) HD Graphics", "code_name": "", "technology": null, "memory_size": -1, "memory_type": "Unknown (-1)", "bus_width": 0, "performance_levels": [ { "name": "", "core": -1, "shaders": -1, "memory": -1, "stock_core": -1, "stock_shaders": -1, "stock_memory": -1 } ], "current_performance_level": -1, "core_temp": -1, "shaders_temp": -1, "memory_temp": -1, "fan_speed": -1, "fam_pwm": -1, "driver_version": null, "directx_version": "11.0", "bus_type": 0, "multi_vpu": 0 } ], "monitors": [ { "name": "Battery 1", "type": "Batterry", "id": 0, "internal_id": -1, "sensors": [ { "name": "Current Voltage", "sensor_index": 0, "monitor_id": 0, "raw_value": 16256, "float_value": 16.256, "min_value": 16.256, "max_value": 16.256, "type": "Voltage" }, { "name": "Designed Capacity", "sensor_index": 0, "monitor_id": 0, "raw_value": 1100, "float_value": 1100.0, "min_value": 1100.0, "max_value": 1100.0, "type": "Capacity" }, { "name": "Full Charge Capacity", "sensor_index": 1, "monitor_id": 0, "raw_value": 63, "float_value": 63.0, "min_value": 63.0, "max_value": 63.0, "type": "Capacity" }, { "name": "Current Capacity", "sensor_index": 2, "monitor_id": 0, "raw_value": 61, "float_value": 61.0, "min_value": 61.0, "max_value": 61.0, "type": "Capacity" }, { "name": "Wear Level", "sensor_index": 0, "monitor_id": 0, "raw_value": 5, "float_value": 95.0, "min_value": 95.0, "max_value": 95.0, "type": "Level" }, { "name": "Charge Level", "sensor_index": 1, "monitor_id": 0, "raw_value": 96, "float_value": 96.82539, "min_value": 96.82539, "max_value": 96.82539, "type": "Level" } ] }, { "name": "TOSHIBA MK1234GAX", "type": "Hdd", "id": 1, "internal_id": -1, "sensors": [ { "name": "Assembly", "sensor_index": 0, "monitor_id": 1, "raw_value": 22, "float_value": 22.0, "min_value": 22.0, "max_value": 22.0, "type": "Temperature" } ] } ] }
Returns the list of block lists on this machine.
> GET /machines/:id/blocklists
HTTP/1.1 200 OK { 'block_lists':[ { id: '719b4ab1-23ab-4942-046b-ebe2605b3002', name: 'block_list_name_1', autoUpdate: false, urlFileName: 'some_path_to_file_on_machine_or_url_path', lastUpdated: 'Monday, June 15, 2009 1:45:30 PM', ranges: 231000 }, { id: '719b4ab1-23ab-4942-046b-ebe2605b3002', name: 'block_list_name_2', autoUpdate: false, urlFileName: 'some_path_to_file_on_machine_or_url_path', lastUpdated: 'Monday, June 15, 2009 1:45:30 PM', ranges: 785469 }, { id: '719b4ab1-23ab-4942-046b-ebe2605b3002', name: 'block_list_name_3', autoUpdate: true, urlFileName: 'some_path_to_file_on_machine_or_url_path', lastUpdated: 'Tuesday, June 16, 2009 1:46:30 PM', ranges: 123058 } ] }
Returns the the block list on this machine.
> GET /machines/:machineid/blocklists/:blocklistid
HTTP/1.1 200 OK { id: "719b4ab1-23ab-4942-046b-ebe2605b3002" name: 'block_list_name', autoUpdate: true, urlFileName: 'some_path_to_file_on_machine_or_url_path', lastUpdated: 'Monday, June 15, 2009 1:45:30 PM', ranges: 231000 }
Modifies the block lists on this machine.
> PUT /machines/:machineid/blocklists
{ 'block_lists':[ { id: '719b4ab1-23ab-4942-046b-ebe2605b3002', name: 'block_list_name_1', autoUpdate: false, urlFileName: 'some_path_to_file_on_machine_or_url_path', lastUpdated: 'Monday, June 15, 2009 1:45:30 PM', ranges: 231000 }, { id: '719b4ab1-23ab-4942-046b-ebe2605b3002', name: 'block_list_name_2', autoUpdate: false, urlFileName: 'some_path_to_file_on_machine_or_url_path', lastUpdated: 'Monday, June 15, 2009 1:45:30 PM', ranges: 785469 }, { id: '719b4ab1-23ab-4942-046b-ebe2605b3002', name: 'block_list_name_3', autoUpdate: true, urlFileName: 'some_path_to_file_on_machine_or_url_path', lastUpdated: 'Tuesday, June 16, 2009 1:46:30 PM', ranges: 123058 } ] }
Info about NetBalancer's programmable rules and conditions.
Aside normal traffic rules NetBalancer also offers the unique capability of defining programmable rules for traffic data, that is rules entirely defined by C# code. Normal traffic rules also offer (a simpler) programmability support in the form of C# Script conditions, that is code defining the traffic that matches a normal rule.
Go to Rules, click Add, select 'Programmatic rule', click OK, and then again OK.
GIF example.
You can check all the source code used to compile a programmatic rule in the UI itself, as shown in this animated GIF.
The code contains all the accessible methods, types, constants and context to a programmatic rule and is self-documented.
The code of a prorgammatic rule is compiled on the fly with C# 4.0 and cached for best performance, then is called for every network packet received or sent.
Currently it can execute about 1 million times per second on a single CPU core.
Flexibility is the most important feature of programmatic rules (PR), for example a PR can define multiple priorities based on various conditions, not only a download and upload one.
> rule example
if (p.country == "UK") { //block any UK traffic block(); } else if (p.incoming) { //set High priority for incoming traffic high(); } else { //limit outgoing traffic to 100 KB/s limit(100000); }
The only limits are your imagination and requirements.
The rule code is not permitted any IO operation, including file, registry and network access to avoid elevation security vulnerabilities.
Code reflection is prohibited as well.
Yes, this page is for general information only, for further documentation please copy the source code in your preferred code editor and read it.
It is fully documented with XML documentation, comments and examples.